0
我正在使用AsuncTask从Web服务获取JSON。从JSON我得到“标题”和“全文”。 “标题”是简单的文本,但“全文”是HTML文本。在这个HTML中,我有一些文字和网址与图像。我想在TextView中显示整个HTML。显示从HTML到TextView的图像 - Android
我的代码:
TextView tvArticleTitle = (TextView) findViewById(R.id.tvArticleTitle);
TextView tvArticleText = (TextView) findViewById(R.id.tvArticleText);
public class GetArticleTask extends AsyncTask<String, Void, Boolean> {
private String title;
private String text;
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(context);
dialog.setMessage("Please wait!");
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(Variables.URL_ARTICLE);
httpPost.setEntity(new UrlEncodedFormEntity(pair));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
String data = EntityUtils.toString(httpEntity);
int status = httpResponse.getStatusLine().getStatusCode();
if (status == HttpStatus.SC_OK) {
JSONObject jRealObject = new JSONObject(data);
title = jRealObject.getString("title").toString();
text = jRealObject.getString("fulltext").toString();
return true;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result == false) {
Toast.makeText(context, Variables.ERROR_MESSAGE, Toast.LENGTH_SHORT).show();
} else {
tvArticleTitle.setText(title);
tvArticleText.setText(Html.fromHtml(text, new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
URL sourceURL;
try {
sourceURL = new URL(source);
URLConnection urlConnection = sourceURL.openConnection();
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
Bitmap bm = BitmapFactory.decodeStream(bufferedInputStream);
// convert Bitmap to Drawable
drawable = new BitmapDrawable(getResources(), bm);
drawable.setBounds(0, 0, bm.getWidth(), bm.getHeight());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return drawable;
}
}, null));
if(dialog.isShowing()) {
dialog.dismiss();
}
}
}
}
}
它给我的错误:android.os.NetworkOnMainThreadException。我知道我需要再次在AsyncTask上做这件事,但我不知道如何分割代码。
你应该使用图像跨度来显示图像(在这之前,你需要下载图像太) – MHP 2014-09-30 13:10:39
我认为使用picasa图像库更容易加载该映像,因为它几乎可以处理您制作的所有内容盟友需要担心abou ..我建议你去picasa图像加载器库 – 2014-09-30 13:12:03
@GeorgeThomas是啊。在文本是整个HTML,从那里我想显示所有图像,也是文字。 – KiKo 2014-09-30 13:15:31