0

あるクラスから別の拡張クラスにコンテキストを渡そうとしていますAsyncTask。コードは次のとおりです。

loadSomeStuff slb = new SamsungLB().new loadSomeStuff();
                        slb.execute(USA.this.getSherlockActivity());

非同期タスク:

public void execute(SherlockFragmentActivity sherlockActivity) {
            // TODO Auto-generated method stub
            this.ctx = sherlockActivity;
        }

その後、活動はうまくいきませんでした。そこで、コンテキストが null かどうかを確認しました。

if (ctx == null) {
                System.out.print("null");
            }

はい、私は正しかったです、私のコンテキストは null です! 私は決して execute メソッドを呼び出していないように感じます:/何かアドバイスはありますか? これが私の完全な AsyncTask クラスです。

public class loadSomeStuff extends AsyncTask<String, Integer, String> {

ProgressDialog dialog;
Context ctx;

protected void onPreExecute() {
    dialog = new ProgressDialog(ctx);
    dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    dialog.setCancelable(false);
    dialog.setIndeterminate(false);
    dialog.setMessage(getResources().getString(R.string.searching));
    dialog.show();
}

@Override
protected String doInBackground(String... params) {
    // TODO Auto-generated method stub
    //fillinglistview//
    }
    if (ctx == null) {
        System.out.print("null");
    }
    return null;
}

protected void onProgressUpdate(Integer... progress) {

}

protected void onPostExecute(String result) {
    listview.setAdapter(new MyListAdapterSamsung(getActivity(),
            beanClass));
    if (beanClass.isEmpty()) {
        Toast.makeText(getSherlockActivity(), "No Connection",
                Toast.LENGTH_LONG).show();
    }

}

public void execute(SherlockFragmentActivity sherlockActivity) {
    // TODO Auto-generated method stub
    this.ctx = sherlockActivity;
}
}
4

1 に答える 1

0

次のように、最初にコンストラクターを作成できます。

public loadSomeStuff(SherlockFragmentActivity sherlockActivity) {

    // TODO Auto-generated method stub
    this.ctx = sherlockActivity;
}

f フラグメントがすでに追加されているかどうかを確認することを忘れないでください

protected void onPostExecute(String result) {
   if(isAdded()){
        listview.setAdapter(new MyListAdapterSamsung(getActivity(),
               beanClass));
        if (beanClass.isEmpty()) {
            Toast.makeText(getSherlockActivity(), "No Connection",
                   Toast.LENGTH_LONG).show();
       }
   }
}

そして、あなたがそれを作成するとき:

LoadSomeStuff slb = new SamsungLB().new loadSomeStuff(USA.this.getSherlockActivity());

次に、通常の非同期タスクと同じように実行します!

 slb.execute();

私の答えがあなたに役立つことを願っています:)

于 2013-08-03T20:43:54.783 に答える