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