次の問題が発生しました。誰かが私にヒントを与えてくれることを願っています。
を実行するアクティビティがありAsyncTask< String, Void, ArrayList<Custom object >>
ます。関数では、戻り値でもあるdoInBackground()
新しいカスタム オブジェクトを設定します。新しく作成された で使用されるArrayList
方法onPostExecute()
で、これまでのと同様に設定されてい
ます。ArrayList
ArrayAdapter<Custom object>
ListView
lv.setAdapter(adapter).
ここで重要なことは、MainActivity に戻ってそのアダプターが再び必要になることです。今のところ呼び出して新しいアイテムを追加したいので、MainActivity の内部クラスとしてadapter.add(items).
を持っていて、非常にうまく機能した同じものを使用できました!AsyncTask
ListView
ArrayAdapter,
しかし、それを実行する必要がある別のクラスがあるためAsyncTask
、その内部クラスAsyncTask
をスタンドアロン.java
ファイル ( CustomAsyncTask.java
)に変更しました。
-> 新しいアイテムを に追加しようとすると
、もちろんArrayAdapter
スローされます。つまり、 が に属し、そこに作成されるため、 MainActivity から と をコンストラクターのパラメーターとして使用して使用しようとしましたそこにはありましたが、それは機能しませんでした.in MainActivityは常にnullであり、例外が発生しますNullPointerException!
ArrayAdapter
AsyncTask
ListView
ArrayAdapter
CustomAsyncTask
ArrayAdapter
それを解決する方法はありますか?とても感謝しております。
MainActivity.java のコードは次のとおりです。
// global variables
ArrayAdapter<Custom object> arrayadapter;
ListView listview;
ProgressBar progressbar;
...
protected void myMethod() {
CustomAsyncTask hTask = new CustomAsyncTask(this, listview, progressbar, arrayadapter);
hTaskPlaylist.execute(String sth);
}
...
protected void anotherMethod() {
arrayadapter.add(item);
}
および CustomAsyncTask.java のコード:
package com.mypackage.test;
import java.util.ArrayList;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
public class CustomAsyncTask extends AsyncTask<String, Void, ArrayList<Custom object>>{
Context context;
ListView listview;
ProgressBar progressbar;
ArrayAdapter<Custom object> arrayadapter;
public CustomAsyncTask(Context con, ListView lv, ProgressBar pb, ArrayAdapter<Custom object> aa) {
this.context = con;
this.listview = lv;
this.progressbar = pb;
this.arrayadapter = aa;
}
@Override
protected void onPreExecute() {
listview.setVisibility(ListView.GONE);
progressbar.setVisibility(ProgressBar.VISIBLE);
super.onPreExecute();
}
@Override
protected ArrayList<Custom object> doInBackground(String... params) {
ArrayList<Custom object> list = new ArrayList<Custom object>();
... doing something and populating list
return list;
}
@Override
protected void onPostExecute(ArrayList<Custom object> list) {
super.onPostExecute(list);
arrayadapter = new ArrayAdapter<Custom object>(context, android.R.layout.simple_list_item_1, list);
listview.setAdapter(arrayadapter);
progressbar.setVisibility(ProgressBar.GONE);
listview.setVisibility(ListView.VISIBLE);
}
}
}