0

私のアプリケーションでは、サーバーから画像を取得するためにサービス呼び出しを行いました。このために、非同期タスク クラスを使用しました。その後、画面がしばらく空白になり、プログレスバーが表示されます。トレースを行ったところ、新しいスレッドで画像の読み込みを開始する必要があることがわかりました。したがって、非同期タスク内で新しいスレッドを開始する方法を知りたいですバックグラウンドメソッド.助けてください..私はこれが初めてです.以下は私のコードです..

public class GetRestaurentDetails extends AsyncTask<Object, Object, Object>
{

    Context context;
    ProgressDialog progressDialog;


    public GetRestaurentDetails(Context c) {
        this.context=c;

    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();


        this.progressDialog=ProgressDialog.show(context,"","Please wait...");

    }
    @Override
    protected Object doInBackground(Object... params) {

        onGetRestaurentDetails();
        listAdapter = new RestaurantLidtAdapter(arrImages);
        setListAdapter(listAdapter);

        return null;
    }


    @Override
    protected void onPostExecute(Object result) {
        super.onPostExecute(result);


        progressDialog.dismiss();

    }

}

そしてアダプタークラス

private class RestaurantLidtAdapter extends BaseAdapter{
    Holder holder = null;
    LayoutInflater inflater;
    ImageLoader imageLoader;
    public RestaurantLidtAdapter(ArrayList<String> arrImages){

        inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(RestaurantListActivity.this);
    }

    @Override
    public int getCount() {

        return arrPromotions.size();
    }

    @Override
    public Object getItem(int position) {

        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub


        if(convertView == null){

            holder = new Holder();
            convertView = (View)inflater.inflate(R.layout.restaurantlistrowlayout, parent, false);
            holder.imgArrowImage = (ImageView)convertView.findViewById(R.id.imgArrowInHotelList);
            holder.imgHotelImage = (ImageView)convertView.findViewById(R.id.rowHotelImage);
            holder.txtRestaurentPromotion = (TextView)convertView.findViewById(R.id.TextViewPromotions);
            holder.txtRestaurentName = (TextView)convertView.findViewById(R.id.TextViewRestaurentName);

            convertView.setTag(holder);
        }
        else
        {
            holder = (Holder)convertView.getTag();


        }

        //holder.imgHotelImage.setImageBitmap(loadBitmap(arrImages.get(position)));


        imageLoader.DisplayImage(arrImages.get(position), holder.imgHotelImage);
        holder.txtRestaurentPromotion.setText(arrPromotions.get(position));
        holder.txtRestaurentName.setText(arrRestaurentName.get(position));
        convertView.setTag(holder);
        return convertView;
    }



}
4

1 に答える 1

0

既に遅延読み込みリストビュー コードから ImageLoader クラスを使用しているため、アダプターを作成して doInBackground() メソッド内の ListView に設定するだけなので、AsyncTask を実装する必要はないと思います。

また、バックグラウンド プロセスでアダプターを作成しようとしているため、明らかな問題がありますが、これは望ましくありません。

そして今、私が提案する解決策は、AsyncTask からこれらの 2 行を削除し、Images URL をアダプター クラスに直接渡すことです。

于 2012-04-16T07:13:50.443 に答える