当前位置: 首页 > 知识库问答 >
问题:

找不到从后台进程修改适配器内容的位置

沈宇定
2023-03-14

每天我都会收到至少1份关于我的应用程序崩溃的报告,因为我的列表适配器正在从后台线程修改,但我在类中找不到发生这种情况的位置。

我能做些什么来找到这个问题的所在?堆栈跟踪没有帮助。

java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知。确保适配器的内容不是从后台线程修改的,而是仅从UI线程修改的。[在android.vidget.ListView.layoutChildren(ListView.java:1538)的android.widget.AbsListView.onTouchEvent(AbsListView.java:3524)的Andrio.vidget.view.dispatchTouchEventandroid.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1905)位于android.vview.ViewGroup.DispatchTransformed TouchEventandroid.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)位于android.vview.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)位于android.view.ViewGroup.ddispatchTransformedtouchEvent(ViewGroup.java:1176)位于com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvents(PhoneWindow.java:11930)位于com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1384),位于android.view.view.dispatchPointerEvent(view.java:7307)位于android.wiew.view.ViewRootImpl.deliveryPointerEventandroid.view.ViewRootImpl.deliveryInputEvent(ViewRootImpl.java:3129),位于android.vview.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4165),位于android.view.view.VviewRootImpl.enqueeInputEventandroid.os.MessageQueue。位于android.os.MessageQueue.next(MessageQueue.java:125)的nativePollOnce(本机方法)位于android.app.ActivityThread.main(ActivityThread.java:4781)的android.os.Looper.loop(Looper.java:124)的java.lang.reflect.Method。invokeNative(本机方法)位于java.lang.reflect.Method.invoke(Method.java:511)位于com.android.internal.os.ZygateInit$MethodAndArgsCaller.run(ZygoteInit.java:3152)位于com.android.internal.os.ZygoteIndit.main(ZygetInit.java:2919)位于dalvik.system.NativeStart。main(本机方法)

共有1个答案

蓝恩
2023-03-14

可能你的列表适配器正在从你的后台线程被修改,原因是你在后台线程内调用 notifyDataSetChanged() 而不是在主 UI 线程中,
解决方案是将其移动到 UI 线程或简单地用 runOnUiThread() 包装它:

......
     runOnUiThread(new Runnable() 
         { 
            public void run() 
                {
                   notifyDataSetChanged();
                }
         });
... ...

希望这对你有帮助。

 类似资料:
  • 问题内容: 我刚刚为iPhone和新的Xcode下载了iOS 13。我想测试适用于iOS 13的应用程序,但是当我尝试运行应用程序时,几秒钟后会出现错误。错误: 由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“从主线程访问布局引擎后,不得从后台线程对其进行修改。” ***第一掷调用堆栈:(0x191ea9c30 0x191bc40c8

  • 问题内容: 我在Qt工作,当我按下GO按钮时,我需要不断将软件包发送到网络并使用收到的信息修改界面。 问题是我在按钮中有一个,所以按钮永不结束,所以界面永不更新。我想在按钮中创建一个线程并将代码放在那里。 我的问题是如何从线程修改接口?(例如,如何从线程修改textBox? 问题答案: 关于Qt的重要一点是, 必须 仅从GUI线程(即主线程)使用Qt GUI。 这就是为什么执行此操作的正确方法是从

  • 通过此功能可以设置网站后台的访问路径 这里填写你需要设置的后台访问域名,例如:admin.domain.com 在该域名解析到您的网站服务器后,只能通过该域名登陆 配置保存在/caches/configs/system.php中,修改参数admin_url可手动取消绑定

  • 在本章中,我们将研究如何在Drupal中Modify content 。 您可以修改以前使用的任何内容类型的内容,例如Articles, Basic page和Blog entry 。 以下是用于修改内容的简单步骤。 Step 1 - 单击选项卡Content ,如以下屏幕所示。 Step 2 - 您将看到与以下相同的屏幕。 Step 3 - 如果您有大量内容,可以使用过滤器搜索要修改的内容。 您

  • 我正在Worklight中使用一个基于Java的适配器。我有一个返回字符串值的方法。我可以调用该函数,结果将被送到适配器中的成功处理程序,但我无法找到关于返回值的任何信息。我在响应JSON中的任何地方都看不到返回的字符串。有谁能帮我一下吗? 下面是我的响应JSON: {“Status”:200,“InvocationContext”:Null,“InvocationResult”:{“Respon

  • 本文向大家介绍JS函数修改html的元素内容,及修改属性内容的方法,包括了JS函数修改html的元素内容,及修改属性内容的方法的使用技巧和注意事项,需要的朋友参考一下 修改元素内容: 修改元素标签属性: 以上就是小编为大家带来的JS函数修改html的元素内容,及修改属性内容的方法全部内容了,希望大家多多支持呐喊教程~