2013-10-07 3 views
0

Это мой код адаптер пользовательский массив с помощью этого конструктораAsyncTask и контекст

public class CustomArrayAdapter extends ArrayAdapter<String> { 

RowItems RowItems; 
List<RowData> DataList; 

public CustomArrayAdapter(Context context, int textViewId, String[] id, RowItems rowItems, List<RowData> listData) 

и затмить TRYS изменить его в моем AsyncTask и это мой AsyncTask

private class asyncTaskProduct extends AsyncTask<Void, Void, Boolean>{ 
    String Url; 
    String Result; 
    Context MyContex; 
    ProgressDialog PD; 
    String[] id; 
    List<RowData> L; 
    ListView lvProduct; 
    public asyncTaskProduct(String url, Context contex,ListView lv) { 
     Url = url; 
     MyContex = contex; 
     lvProduct = lv;   
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     PD = new ProgressDialog(MyContex); 
     PD.setMessage("File downloading ..."); 
     PD.setCancelable(false); 
     PD.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     PD.show(); 
    } 

    @Override 
    protected Boolean doInBackground(Void... arg0) { 
     boolean State = false; 
     getJsonResult Con = new getJsonResult(); 
     Result = Con.postForJson(Url); 
     if (Result != null){ 
      State = true; 
      Result = Result.substring(10, Result.length() - 1); 
     } 
     return State; 
    }; 

    protected void onPostExecute(Boolean State) { 
     if (State) { 
      for (int i = 0; i < L.size(); i++) { 
       id [i]=String.valueOf(i); 
      } 
      lvProduct.setAdapter(new CustomArrayAdapter(this,R.id.lvRow_tv_ID, id, new RowItems(), L));     
      Toast.makeText(MyContex,Result, Toast.LENGTH_SHORT).show(); 
     }else { 
      Toast.makeText(MyContex,"Error", Toast.LENGTH_SHORT).show(); 
     } 
     PD.cancel(); 
    } 

моя ошибка lvProduct .setAdpter. Eclips говорят, что конструктор не определен и попытаться изменить его

CustomArrayAdapter(**asyncTaskProduct**, int textViewId, String[] id, RowItems rowItems, List<RowData> listData) 

почему изменение контекста для asyncTaskProduct? !!

ответ

0
new CustomArrayAdapter(this,R.id.lvRow_tv_ID, id, new RowItems(), L)); 

В этом утверждении первый параметр не является контекстом. Это экземпляр асинктас. Вы должны передать контекст как параметр. Так что попробуйте это вместо

new CustomArrayAdapter(yourcontext ,R.id.lvRow_tv_ID, id, new RowItems(), L));   

теперь вопрос, что yourContext .. Если вы объявляя AsyncTask в пределах деятельности (или что-то, что расширяет контекст) .. то вы можете просто использовать ClassName.this .... .

Если нет, то лучше передать контекст в AsyncTask

+0

tnx я меняю его на myContext. –

+0

приветствую :) – stinepike

0

AsyncTask не extendeing контекста, такие как активность или услуги делают. Линия должна быть:

lvProduct.setAdapter(MyContext, new CustomArrayAdapter(this,R.id.lvRow_tv_ID, id, new RowItems(), L));

BTW: Пожалуйста, начните имена переменных для локальных переменных с строчной. Таким образом, MyContext должен быть действительно myContext. Это легче читать для других.

Смежные вопросы