0

私はImageViewこのようなものを持っています

 <ImageView
   android:id="@+id/imageFromUrl"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_centerHorizontal="true"
   android:layout_marginTop="50dp"
   android:adjustViewBounds="true"
   android:scaleType="fitCenter" />

実行時に Web サービスから取得したアドレスから画像を表示する必要があります。

画像のサイズは非常に大きい (249x2902) ですが、ファイルのサイズは約 32k と非常に小さいことに注意してください。

私は試した

 URL url = new URL(urlToImage);
 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 connection.setDoInput(true);
 connection.connect();
 InputStream input = connection.getInputStream();
 Bitmap myBitmap = BitmapFactory.decodeStream(input);
 imageFromUrl.setImageBitmap(myBitmap);

これは画像をレンダリングしていないようで、ただの白です。

私も疲れました

imageFromUrl.setImageURI(Uri.parse(urlToImage));

それも機能しません。画面は白いです。

しかし、もし私が aWebViewを使って

webView.loadUrl(urlToImage);

それはうまくロードされます。

何を与える?なぜ機能しImageViewないのですか?

動作していない Galaxy Tab 2 でテストしています。エミュレーターで試してみると、すべて問題なく、ImageView が動作します。

4

1 に答える 1

1

ここにいくつかのことがあります:

まず、Kbs 単位のサイズは、Android が画像を処理する方法が原因でアプリがクラッシュしないという意味ではありません。内部的にヒープ内で、ファイルは幅 * 高さ * 4 バイトのメモリを必要とし、1Kb サイズの巨大なサイズのファイルになります。大きなサイズのファイルをダウンロードして処理するには、ドキュメントに示されている Android のベスト プラクティスに従う必要があります。それらは、ImageBounds をロードせずにチェックするメカニズムを提供し、計算が完了したら、何にでも適合する適切な画像サイズをロードします。ご希望のエリア。

次に、表示しているコードによると、メインの UI スレッドで画像をダウンロードしているように見えますが、最新の Android バージョンではこのアクションが禁止されていることを考慮して、メイン スレッドでネットワーク呼び出しを使用するための例外をスローします。より良い応答を得るには、logcat 例外がある場合は投稿してください...しかし、何があっても、このような大きなサイズの画像を直接ロードしないでください。詳細については、提供されているリンクをお読みください。

お役に立てれば。

よろしく

于 2013-10-04T16:12:28.457 に答える