1

图片

我正在解析来自 Wordpress 博客的内容。我不知道如何从JSON. 这是图片网址"content":"<p><img class=\"aligncenter\" style=\"cursor: -moz-zoom-in;\" src=\"http:\/\/sphotos-h.ak.fbcdn.net\/hphotos-ak-ash4\/395050_10151219612828815_5123523_n.jpg\" alt=\"http:\/\/sphotos-h.ak.fbcdn.net\/hphotos-ak-ash4\/395050_10151219612828815_5123523_n.jpg\" width=\"390\" height=\"466\" \/><\/p>\n<p><span id=\"more-5267\"><\/span><\/p>\n<p>Some texts here...XXXXXYYYYYZZZZ"

HttpClient client;
HttpGet get;
HttpResponse res;
HttpEntity ent;
Button b;
TextView tv1,tv2,tv3;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Typeface tp=Typeface.createFromAsset(getAssets(), "AftaSansThin-Regular.otf");
    StrictMode.enableDefaults();
    b = (Button) findViewById(R.id.button1);
    tv1 = (TextView) findViewById(R.id.textView1);
    tv2 = (TextView) findViewById(R.id.textView2);
    tv3 = (TextView) findViewById(R.id.textView3);
    tv1.setTypeface(tp);
    tv2.setTypeface(tp);
    tv3.setTypeface(tp);
    client = new DefaultHttpClient();
    get = new HttpGet("http://example.com");
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {
                res=client.execute(get);
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            ent=res.getEntity();
            InputStream is = null;
            try {
                is=ent.getContent();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuffer sb = new StringBuffer();
            String line = null;
            do{
                try {
                    line = br.readLine();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                sb.append(line);
            } while (line!=null);
            String str = sb.toString();

            try {
                JSONObject ob1 = new JSONObject(str);
                JSONObject ob2 = ob1.getJSONObject("post");
                String title = ob2.getString("title");
                String date = ob2.getString("date");
                String content = ob2.getString("content");



                tv1.setText(title);
                tv2.setText(date);
                Spanned marked_up = Html.fromHtml(content);
                tv3.setText(marked_up.toString(),BufferType.SPANNABLE);

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}
4

4 回答 4

1

对于 HTML 数据:

根据代码,我可以说您正在图像中获取 HTML 数据,因此您可以在 WebView 中加载此 HTML。

图片网址:

正如其他人建议的那样,您可以使用Android 通用图像加载器或Fedor库或任何库的图像延迟加载来加载图像,前提是您获取的是图像 URL 而不是 HTML 数据。

于 2012-12-14T04:32:36.073 回答
1

首先,这不是一个有效的图像 URL - \"http://sphotos-h.ak.fbcdn.net/hphotos-ak-ash4/395050_10151219612828815_5123523_n.jpg\" 更接近你想要的但仍然有所有转义字符.

如果您可以让 JSON 数据包将 URL 作为字符串发送下来,效率会更高。如果未对其进行配置使其不会转义所有字符,则从返回的文本中删除 Url。

接下来,我要做的是在 AsyncTask 中启动 http 连接并获取输入流。使用 BitmapFactory.decodeStream(HttpInputStream) 将流转为位图,然后将位图返回给 UI 线程 onPostExecute。

如果您正在处理许多图像下载,您可能需要考虑使用开源库或编写 AsyncImageLoader

希望这可以帮助 :)

于 2012-12-14T03:04:14.523 回答
1

如果您已经获得图像 URL,则可以使用此库从主线程异步加载图像,我只是尝试一下,它非常易于使用并且工作正常,希望对您有所帮助:https ://github.com/nostra13/Android-通用图像加载器

于 2012-12-14T03:30:03.253 回答
0

很少有内容实际上是 JSON。此内容中的“键”被命名为“内容”,值是第一个冒号“:”之后的其余部分。其余部分是常规 HTML(需要使用正则表达式或其他 HTML 解析器提取)。

在 javascript 中,您能做的最好的事情是:

var text = JSON.parse(content)["content"]; // which gives you everything after the colon.

但是你仍然需要一个正则表达式来提取所有的 href 标签:

这是命令行上的示例:

bash$ content="<p><img class=\"aligncenter\" style=\"cursor: -moz-zoom-in;\" src=\"http:\/\/sphotos-h.ak.fbcdn.net\/hphotos-ak-ash4\/395050_10151219612828815_5123523_n.jpg\" alt=\"http:\/\/sphotos-h.ak.fbcdn.net\/hphotos-ak-ash4\/395050_10151219612828815_5123523_n.jpg\" width=\"390\" height=\"466\" \/><\/p>\n<p><span id=\"more-5267\"><\/span><\/p>\n<p>Some texts here...XXXXXYYYYYZZZZ"

bash$ echo $content | grep -oE "(src|alt)=\"[^\"]+\.jpg\"" | sed "s/\(src=\|alt=\|\"\)//g" | sed "s/\\///g"
http:\\sphotos-h.ak.fbcdn.net\hphotos-ak-ash4\395050_10151219612828815_5123523_n.jpg
http:\\sphotos-h.ak.fbcdn.net\hphotos-ak-ash4\395050_10151219612828815_5123523_n.jpg

您可以将该正则表达式翻译成您使用的任何语言。

于 2012-12-14T03:15:33.490 回答