0

ImageViews で構成されるテーブルがある UI コンポーネントがあります。URL から画像を設定したいと思います。

画像が UI に設定されている他のクラスを非同期で呼び出そうとすると、UI スレッドによってのみ UI を更新できるというエラーが表示されます。UI を読み込み、画像が利用可能になったら読み込みたいです。

これが私のコードです:

Calling function...
    new AsyncImageLoader(context,imgviewArray).execute();

//    Called class..
        @Override
        protected Void doInBackground(Void... urls) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            int i = 0;

            try{
                db=new MyDB(mainact_instance);
                System.out.println("Inside doInBackground");

                if(isNetworkAvailable())
                {
                    System.out.println("Network connected");
                    System.out.println("Fetching from network-Images");
                    Movie[] movies = db.selectRecords();
                    for(Movie mv : movies)
                    {
                        try {
                            URL url = new URL(IMAGE_URL+mv.getId()+".jpg");
                            Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                            images[i].setImageBitmap(bmp);
                            i++;
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } 
                    }

                }

                else{
                    System.out.println("Network not connected..fetching max id row");
                }
            }catch(Exception ex){ex.printStackTrace();
            }
            return null;
            //db.close();       
        }

どうすればこれを達成できるか教えてください。

4

1 に答える 1

3

UI スレッド関連のコードをonPostExecute||に移動します。onProgressUpdate

例えば:

protected void onPostExecute(Long result) {

 // after finishing fetching your image from URL, update the ImageView here
 images[i].setImageBitmap(bmp);
}

内部に複数の画像をダウンロードしていることがわかります。AsyncTask次にPublishProgress、AsyncTask 定義を更新して、Bitmaps を次のように publishProgress メソッドに渡すことができるようにする必要があります。

AsyncTask<whatever..., Bitmaps, whatever...>() 

それで

publishProgress(yourBitmapObject);

protected void onProgressUpdate(Bitmap[] values) {
  images[i].setImageBitmap(values[0]);
};
于 2013-07-07T11:55:38.160 に答える