2012-04-16 37 views
0

在我的應用程序由服務呼叫從server.For獲取圖像我使用懶loading.Now的問題是這樣的我已經使用asynk任務class.For圖像加載啓動從asynk任務新thred,當我打電話從asynk任務的背景方法加載圖像,然後屏幕變得空白一段時間,然後我看到進度條。當我做了跟蹤它,我發現我應該開始圖像加載在一個新的線程。所以我想要知道如何開始asynk任務背景method.Please幫助中一個新的線程me..I'm新this.Below是我的代碼..android系統

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; 
    } 



} 

回答

0

因爲你已經使用從延遲加載列表視圖代碼ImageLoader的課,我覺得你並不需要執行的AsyncTask,因爲你只是創建適配器並將其設置爲doInBackground()方法中ListView控件。

還有一個問題很明顯,因爲您正嘗試在後臺進程中創建適配器,這不是可取的,您應該在除doInBackground()之外的onPostExecute()內只設置一次適配器。

而現在,我建議你的解決方法是刪除了那些的AsyncTask 2線和傳輸圖像URL直接適配器類。

+0

@ Paresh..that不解決我的問題... – android 2012-04-16 07:24:39

+0

@android具體談談爲什麼它不解決問題了嗎?我仍然懷疑你的AsyncTask聲明只是創建適配器並將其設置爲ListView。 – 2012-04-16 07:28:02