1

こんにちは、サーバーから画像をフェッチしているときに次の例外が発生します。次のようになった後、5〜7枚の画像を取得するために作業します。

06-12 16:35:50.904: 警告/AsyncTask(717): java.lang.InterruptedException 06-12 16:35:50.904: 警告/AsyncTask(717):
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptively (AbstractQueuedSynchronizer.java:1254) 06-12 16:35:50.904: 警告/AsyncTask (717): java.util.concurrent.FutureTask$Sync.innerGet (FutureTask. java:219) 06-12 16:35:50.904: 警告/AsyncTask (717): java.util.concurrent.FutureTask.get (FutureTask.java:82) 06-12 16:35:50.904: 警告/AsyncTask ( 717): android.os.AsyncTask$3.done(AsyncTask.java:196) 06-12 16:35:50.904: WARN/AsyncTask(717): java.util.concurrent.FutureTask$Sync.innerCancel(FutureTask. java:293) 06-12 16:35:50.904: WARN/AsyncTask(717): java.util.concurrent.FutureTask.cancel(FutureTask.java:75) 06-12 16:35:50.904: WARN/AsyncTask( 717): android.os.AsyncTask.cancel(AsyncTask.java:325) 06-12 16:35:50.904: WARN/AsyncTask(717): us.bnn で。news.IncidentDetailsActivity$GetImages.doInBackground(IncidentDetailsActivity.java:1691) 06-12 16:35:50.904: WARN/AsyncTask(717): us.bnn.news.IncidentDetailsActivity$GetImages.doInBackground(IncidentDetailsActivity.java:1) 06 -12 16:35:50.904: WARN/AsyncTask(717): android.os.AsyncTask$2.call(AsyncTask.java:185) 06-12 16:35:50.904: WARN/AsyncTask(717): Java で。 util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 06-12 16:35:50.904: 警告/AsyncTask(717): java.util.concurrent.FutureTask.run(FutureTask.java:137) で 06 -12 16:35:50.904: WARN/AsyncTask(717): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 06-12 16:35:50.904: WARN/AsyncTask(717): Java で.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 06-12 16:35:50.904:WARN/AsyncTask(717): java.lang.Thread.run(Thread.java:1096) で

私はこの方法を使用しています:

public static Bitmap getLargeImage(String imgUrl)
    {
        Bitmap bitmap = null;               
        InputStream in = null;
        Log.v(TAG,"start fetchimg main images");
        try
        {             
            DefaultHttpClient mHttpClient = new DefaultHttpClient();

            HttpGet mHttpGet = new HttpGet(imgUrl);

            HttpResponse mHttpResponse = mHttpClient.execute(mHttpGet);

            if (mHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 
            {
                HttpEntity entity = mHttpResponse.getEntity();           
                if ( entity != null) 
                {
                    in = entity.getContent();

                    BufferedInputStream bis = new BufferedInputStream(in, 8190);

                    ByteArrayBuffer baf = new ByteArrayBuffer(50);
                    int current = 0;
                    while ((current = bis.read()) != -1) {
                        baf.append((byte)current);
                    }
                    byte[] imageData = baf.toByteArray();
                    BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
                    if(in != null)
                        in.close();
                } 
            }                     
        }
        catch (Exception ex)
        {
            Log.v("Error Fetching images from url",ex.getMessage());          
        }
        return bitmap;
    }
4

1 に答える 1

1

別のスレッドで画像を受け取りますか? はいの場合、画像をダウンロードするためにどのクラスを使用しますか? 標準の HttpClient はスレッドセーフではありません。スレッドセーフなものを取得するには、ThreadSafeClientConnManager を使用する必要があります。

于 2011-06-12T11:17:11.523 に答える