ListView 未在 AsyncTask 中初始化

Posted

技术标签:

【中文标题】ListView 未在 AsyncTask 中初始化【英文标题】:ListView does not get initialized in AsyncTask 【发布时间】:2018-03-18 11:20:01 【问题描述】:

我有一个应用程序,它给我带来了 sqlite 的数据并将它们呈现在一个片段中的列表视图中,我使用 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);

异步任务

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);

【问题讨论】:

doInBackground方法不能做UI部分,需要在onCreateView方法中找到id试试。 【参考方案1】:

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

android 中,与 UI 相关的一切都必须在主线程中完成。

最好在 onCreate() 方法中初始化每个 Activity 自己的组件,或者,如果您的组件在 Fragment 中,则在其 onCreateView() 方法中初始化。

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

不过,我不知道这是一个多么好的做法。

【讨论】:

非常感谢您的及时回复,我是这个 android 的新手,请告诉我如何在 oncreate 上初始化 listview 并能够将数据从 asynctask 添加到适配器? 我解决了,在onPostExecute中初始化listview 很高兴看到你自己做了!如果您认为答案可以帮助您解决问题,请将其标记为正确。否则发布您自己的解决方案并接受它,这样将来的读者也会得到帮助。欢迎来到 SO

以上是关于ListView 未在 AsyncTask 中初始化的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask 完成后 ListView 上的 setOnItemClickListener

在 asynctask 类中设置为 listView

AsyncTask 在 doInBackground 中崩溃,添加到 listview

使用 asynctask 在所有 Fragment 中的 Activity 中显示 ListView

使用 AsyncTask 在 ListView 中加载图片

JSONArray 到 ListView - AsyncTask