1

画像

Wordpressブログからこのコンテンツを解析しています。から画像を取得する方法がわかりませんJSON。これは画像のURLです"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 データを取得していると言えるので、この HTML を WebView 内にロードできます。

画像 URL の場合:

他の人が示唆しているように、HTML データの代わりに画像 URL を取得している場合にのみ、Android Universal Image LoaderまたはFedorライブラリによる画像の遅延読み込みまたは任意のライブラリを使用して画像を読み込むことができます。

于 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 を取得している場合は、この lib を使用してメイン スレッドから非同期に画像を読み込むことができます。ユニバーサルイメージローダー

于 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 に答える