android java html字符串,java – Android:如何处理嵌入在使用JSON检索的字符串中的html标记...

我有一个显示文章的新闻网站,我在android studio中编写了一个java代码,将文章的内容从URL like this作为JSON获取,到目前为止一切都很好.

但在文章中可能有描述中的照片,现在我想得到html< img />来自描述节点的标签,并在我的Android应用程序中正确显示图像,它们出现在描述中.

如果有帮助,这是我的测试代码:

import java.io.IOException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.util.EntityUtils;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.app.Activity;

import android.text.Html;

import android.util.Log;

import android.widget.ImageView;

import android.widget.TextView;

import java.io.InputStream;

public class SingleContactActivity extends Activity {

public static String myArticleUrl = "http://ana.fm/api/article/";

TextView title;

TextView desc;

ImageView img;

String ar_id;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.article);

title = (TextView) findViewById(R.id.single_article_title);

desc = (TextView) findViewById(R.id.single_article_desc);

img = (ImageView) findViewById(R.id.single_article_cover_photo);

ar_id = getIntent().getExtras().getString("id");

myArticleUrl = myArticleUrl.concat(ar_id);

new LoadAllArticles().execute();

}

// Load an image from a url

private class DownloadImageTask extends AsyncTask {

ImageView bmImage;

public DownloadImageTask(ImageView bmImage) {

this.bmImage = bmImage;

}

protected Bitmap doInBackground(String... urls) {

String urldisplay = urls[0];

Bitmap mIcon11 = null;

try {

InputStream in = new java.net.URL(urldisplay).openStream();

mIcon11 = BitmapFactory.decodeStream(in);

} catch (Exception e) {

Log.e("Error", e.getMessage());

e.printStackTrace();

}

return mIcon11;

}

protected void onPostExecute(Bitmap result) {

bmImage.setImageBitmap(result);

}

}

// LOADING THE ARTICLE CONTENTS IN THE BACKGROUND

class LoadAllArticles extends AsyncTask {

private ProgressDialog progressDialog = new ProgressDialog(SingleContactActivity.this);

InputStream inputStream = null;

String result = "";

HttpResponse httpResponse;

HttpEntity httpEntity;

protected void onPreExecute() {

progressDialog.setMessage("Downloading article...");

progressDialog.show();

progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

public void onCancel(DialogInterface arg0) {

LoadAllArticles.this.cancel(true);

}

});

}

@Override

protected Void doInBackground(String... params) {

String url_select = myArticleUrl;

// Set up HTTP Get

HttpClient httpClient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(url_select);

try {

httpResponse = httpClient.execute(httpGet);

result = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

protected void onPostExecute(Void v) {

//parse JSON data

try {

JSONObject parent_obj = new JSONObject(result);

JSONArray jArray= parent_obj.getJSONArray("article");

JSONObject json = jArray.getJSONObject(0);

String ar_title = json.getString("title");

String ar_desc = json.getString("description");

String ar_image = json.getString("inner_photo");

String newTitle = Html.fromHtml(ar_title).toString();

title.setText(newTitle);

String newDesc = Html.fromHtml(ar_desc).toString();

desc.setText(newDesc);

if(ar_image != null) {

String img_url = "http://www.ana.fm/photos/articles/".concat(ar_image);

new DownloadImageTask(img).execute(img_url);

}

this.progressDialog.dismiss();

} catch (JSONException e) {

Log.e("JSONException", "Error: " + e.toString());

} // catch (JSONException e)

}

}

}

这是XML article.xml:

android:layout_width="wrap_content" android:layout_height="fill_parent">

android:layout_width="match_parent" android:layout_height="wrap_content"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/single_article_cover_photo"

android:layout_gravity="center"

android:layout_weight=".14"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/single_article_title"

android:layout_gravity="center"

android:textColor="#acacac"

android:layout_weight=".14"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/single_article_desc"

android:layout_gravity="center"

android:layout_weight=".14"/>

有没有办法做到这一点 ?

解决方法:

您可以尝试使用该类:

public class UILImageGetter implements Html.ImageGetter {

Context c;

TextView container;

public UILImageGetter(View textView, Context context) {

this.c = context;

this.container = (TextView) textView;

}

@Override

public Drawable getDrawable(String source) {

urlDrawable = new UrlImageDownloader(c.getResources(), source);

urlDrawable.drawable = c.getResources().getDrawable(R.drawable.no_image);

ImageLoader.getInstance().loadImage(source, new SimpleListener(urlDrawable));

return urlDrawable;

}

private class SimpleListener extends SimpleImageLoadingListener {

UrlImageDownloader urlImageDownloader;

public SimpleListener(UrlImageDownloader downloader) {

super();

urlImageDownloader = downloader;

}

@Override

public void onl oadingComplete(String imageUri, View view, Bitmap loadedImage) {

int width = loadedImage.getWidth();

int height = loadedImage.getHeight();

int newWidth = width;

int newHeight = height;

if(width > container.getWidth() ) {

newWidth = container.getWidth();

newHeight = (newWidth * height) / width;

}

if (view != null) {

view.getLayoutParams().width = newWidth;

view.getLayoutParams().height = newHeight;

}

Drawable result = new BitmapDrawable(c.getResources(), loadedImage);

result.setBounds(0, 0, newWidth, newHeight);

urlImageDownloader.setBounds(0, 0, newWidth, newHeight);

urlImageDownloader.drawable = result;

container.setHeight((container.getHeight() + result.getIntrinsicHeight()));

container.invalidate();

}

}

private class UrlImageDownloader extends BitmapDrawable {

public Drawable drawable;

public UrlImageDownloader(Resources res, String filepath) {

super(res, filepath);

drawable = new BitmapDrawable(res, filepath);

}

@Override

public void draw(Canvas canvas) {

if(drawable != null) {

drawable.draw(canvas);

}

}

}

如果你这样做,你必须导入库imageloader.然后你写这个:

Spanned spanned = Html.fromHtml(ar_desc, new UILImageGetter(desc, this), null);

desc.setText(spanned);

此外,您可以使用WebView.

标签:html,android,java,json,android-studio

来源: https://codeday.me/bug/20190928/1828786.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值