0

これは、このコンストラクターを使用したカスタム配列アダプターの私のコードです

public class CustomArrayAdapter extends ArrayAdapter<String> {

RowItems RowItems;
List<RowData> DataList;

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

そしてEclipseは私の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 です。日食は、コンストラクターが未定義であると言い、それをに変更しようとします

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

なぜ Context を asyncTaskProduct に変更するのですか?!!

4

2 に答える 2

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

このステートメントでは、最初のパラメーターはコンテキストではありません。これは asynctask のインスタンスです。コンテキストをパラメーターとして渡す必要があります。代わりにこれを試してください

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

問題は、yourContext とは何かということです。アクティビティ (またはコンテキストを拡張するもの) 内で asynctask を宣言している場合は、単純に ClassName.this..... を使用できます。

そうでない場合は、asynctask でコンテキストを渡す方がよい

于 2013-10-07T15:51:22.243 に答える
0

AsyncTask は、Activity や Service のように Context を拡張していません。行は次のようになります。

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

ところで: ローカル変数の変数名は小文字で始めてください。実際にはそうMyContextあるべきmyContextです。それは他の人にとって読みやすいです。

于 2013-10-07T15:57:04.337 に答える