我遇到了以下问题,希望有人能给我提示。
我有一个执行AsyncTask< String, Void, ArrayList<Custom object >>
. 在doInBackground()
函数中,我设置了一个新ArrayList
的自定义对象,它也是返回值。在一个新创建的onPostExecute()
方法中使用的方法中,它也设置为一个with
so far so good!ArrayList
ArrayAdapter<Custom object>
ListView
lv.setAdapter(adapter).
现在问题是:回到MainActivity我将再次需要那个适配器,因为我想通过调用adapter.add(items).
现在向它添加新项目!AsyncTask
ListView
ArrayAdapter,
但是因为我还有另一个类也需要执行它AsyncTask
,所以我将该内部类AsyncTask
更改为独立.java
文件(CustomAsyncTask.java
)
-> 现在,当我尝试向它添加新项目时,ArrayAdapter
它当然会抛出一个NullPointerException!
,也就是说,导致ArrayAdapter
属于AsyncTask
和在那里创建所以我试图将 MainActivity 中的ListView
和ArrayAdapter
作为CustomAsyncTask
构造函数使用它的参数那里但是那不起作用,ArrayAdapter
在 MainActivity 中始终为 null 导致异常
任何想法如何解决?我真的很感激。
这里是 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);
}
}
}