単純な問題があります。sampleSizeを適切に使用していますが、すでに例外をスローしているため、コードがBitmapFactory
コードに到達しません。DefaultHttpClient
これが私のコードです:
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(mSongInfo.imageLarge);
HttpResponse response = client.execute(request);
int sampleSize = 1;
while (response.getEntity().getContentLength() / sampleSize
/ sampleSize > 100 * 1024) {
sampleSize *= 2;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = sampleSize;
final Bitmap bitmap = BitmapFactory.decodeStream(response
.getEntity().getContent(), null, options);
そしてここに例外があります:
0 java.lang.OutOfMemoryError: (Heap Size=11463KB, Allocated=7623KB, Bitmap Size=9382KB)
1 at org.apache.http.util.ByteArrayBuffer.<init>(ByteArrayBuffer.java:53)
2 at org.apache.http.impl.io.AbstractSessionInputBuffer.init(AbstractSessionInputBuffer.java:82)
3 at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:98)
4 at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83)
5 at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170)
6 at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106)
7 at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129)
8 at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:173)
9 at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
10 at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11 at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
12 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
13 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
14 at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
15 at de.goddchen.android.easysongfinder.fragments.SongFragment$1.run(SongFragment.java:79)
16 at java.lang.Thread.run(Thread.java:1027)
ご覧のとおり、画像のサイズ(Content-Length)を確認して適切なサンプルサイズを計算する部分にコードが到達していません。
DefaultHttpClient.execute(...)
単に呼び出すだけで、完全なコンテンツがすでにメモリに読み込まれることを私は知りませんでした。
私は何か間違ったことをしていますか?最初にコンテンツの長さを取得してから、コンテンツの読み取りを開始する正しい方法は何InputStream
ですか?
編集
URLから画像をロードする方法を示す一般的な回答を避けるために:私はすでにそれを行う方法を知っています、私は上記のコードも投稿しました、なぜあなたはそれに関するチュートリアルを参照し続けるのですか?私はこの問題について明確に明確にしました。HttpClient.execute(...)
適切なコンテンツを提供するのではなく、コンテンツ全体をフェッチしてメモリに保存しているのはなぜInputStream
ですか。URLからをロードする方法に関する初心者向けチュートリアルを投稿しないでくださいBitmap
...