Java 我们能在doInBackground中读一下RunNuithRead吗

Java 我们能在doInBackground中读一下RunNuithRead吗,java,android,Java,Android,问题在于,当执行AYSNTASK并调用onPostExecute()时(其中mAllResultsAdapter.notifyDataSetChanged();被调用),适配器尚未绑定到ListView。我得到以下例外 java.lang.IllegalStateException:适配器的内容已更改 已更改,但ListView未收到通知。确保 适配器的内容不是从后台线程修改的,而是 仅从UI线程。[在ListView中(2131034153类 android.widget.ListView)和

问题在于,当执行AYSNTASK并调用onPostExecute()时(其中
mAllResultsAdapter.notifyDataSetChanged()
;被调用),
适配器尚未绑定到ListView
。我得到以下例外

java.lang.IllegalStateException:适配器的内容已更改 已更改,但ListView未收到通知。确保 适配器的内容不是从后台线程修改的,而是 仅从UI线程。[在ListView中(2131034153类 android.widget.ListView)和适配器(类 com…tracebuzz.allresults.AllResultsAdapter)]

问题是绑定到我的
适配器的
ArrayList
在后台线程中被更改


上述问题是我的具体情况,但我不确定如何应用于我的情况,即后台线程中有这样的
10 ArrayList
被修改,并且
10 Adapaters
需要通知

不要更改后台线程中的适配器数据,只更改UI线程中的适配器数据。后台线程应该创建一个局部变量列表,然后在onPostExecute上,或者通过runOnUiThread,将该列表复制到适配器的列表中,并调用notifyDataSetChanged,只需将notifyDataSetChanged移动到异步任务的onPostExecute方法。此方法在doInBackground完成后在UI线程上运行。这样,您就可以在后台下载和更新适配器内容,只需刷新UI线程上的实际视图

我想您应该能够在异步任务的ui线程上运行代码

如果您没有访问上下文的权限,请使用

@
Override
protected Boolean doInBackground(final String...params) {

    runOnUiThread(new Runnable() {
            public void run() {

我以前也有同样的问题。我尝试了很多方法,包括runOnUiThread,但我认为最好的解决方案是在AsyncTask中创建一个临时ArrayList,以填充doInBackground()。然后,您可以将所有这些元素刷新到真实的ArrayList中,并通过onPostExecute()方法(在UI线程上运行)通知适配器

new Handler(Looper.getMainLooper()).post(youRunnable);