ListView没有在AsyncTask中初始化

时间:2017-10-06 15:39:46

标签: android listview android-asynctask

我有一个应用程序,它带给我sqlite的数据并将它们呈现在片段中的listview中,我使用asynctask来执行此操作,当我执行调试时没有错误,当我运行应用程序时我启动

java.lang.NullPointerException错误:尝试在空对象引用上调用虚方法'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'。

为什么会这样?

  

片段

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_frm_lst_cobertura, container, false);
}
  

的AsyncTask

public class BckListCobertura extends AsyncTask<String, Fila_Lista_cobertura, String> {
ActivityMenu activity;
ListView listViewCobertura;

public BckListCobertura(ActivityMenu activity) {
    this.activity = activity;
    this.delegate = activity;
}
@Override
protected String doInBackground(String... params) {
fila_lista_cobertura_adapter = new Fila_Lista_cobertura_adapter(activity, R.layout.row_lst_cobertura, colorlista);
        listViewCobertura = (ListView) activity.findViewById(R.id.lstvCobertura);
}
@Override
protected void onPostExecute(String result) {
        listViewCobertura.setAdapter(fila_lista_cobertura_adapter);
delegate.processFinishListCobertura(result);
}

1 个答案:

答案 0 :(得分:2)

我认为问题在于您在一个不是 UI线程的线程中初始化ListView,这是一个UI组件。

在Android中,与UI相关的所有内容都必须在主线程中完成。

优良作法是在Activity方法中初始化每个onCreate()自己的组件,或者,如果您的组件位于Fragment,则在onCreateView()中方法

如果您确实想要初始化AsyncTask中的元素,则可以覆盖onPreExecute()方法,根据documentation,该方法在主线程中执行。

不过,我不知道有多好的做法。