我正在从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();
}
}
});
}
答案 0 :(得分: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
希望这有助于:)
答案 1 :(得分:1)
如果你已经获得了图片网址,你可以使用这个lib从主线程加载图像异步,我只是尝试它很容易使用并且工作正常,希望它可以帮助你:https://github.com/nostra13/Android-Universal-Image-Loader
答案 2 :(得分:1)
对于HTML数据:
基于代码,我可以说你在图像中获取HTML数据,因此你可以在WebView中加载这个HTML。
对于图片网址:
正如其他人所建议的那样,只有在您获取图片网址而非HTML数据时,您才可以使用Android Universal Image Loader或Lazy Loading of Images by Fedor库或any library来加载图片。
答案 3 :(得分:0)
很少有内容实际上是JSON。此内容中的“键”命名为“content”,值为第一个冒号':'后的其余部分。其余部分是常规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
您可以将该正则表达式翻译成您正在使用的任何语言。