java.lang.IllegalStateException:不在主线程上

2024-02-11

当服务器端制造商的表中没有可用数据并且数据对象为空时,我试图从 FragmentActivity 地图中的 Goolge 地图中删除标记,但我收到以下错误。我该如何修复它?

Error:

07-12 20:53:05.697: E/AndroidRuntime(26364): FATAL EXCEPTION: IntentService[IntentService]
07-12 20:53:05.697: E/AndroidRuntime(26364): Process: com.bustracker, PID: 26364
07-12 20:53:05.697: E/AndroidRuntime(26364): java.lang.IllegalStateException: Not on the main thread
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.l.a.ce.b(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.maps.api.android.lib6.d.ct.a(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.maps.api.android.lib6.d.aq.a(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.android.gms.maps.model.internal.t.onTransact(SourceFile:51)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at android.os.Binder.transact(Binder.java:380)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.android.gms.maps.model.internal.zzi$zza$zza.remove(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.google.android.gms.maps.model.Marker.remove(Unknown Source)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at com.bustracker.GetLLRD.onHandleIntent(GetLLRD.java:120)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at android.os.Handler.dispatchMessage(Handler.java:102)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at android.os.Looper.loop(Looper.java:145)
07-12 20:53:05.697: E/AndroidRuntime(26364):    at android.os.HandlerThread.run(HandlerThread.java:61)

GetLLRD IntentService 类中的 onHandleIntent 方法:

protected void onHandleIntent(Intent intent) {

                            if (data != null && !data.isEmpty()) {
                                Intent intent1 = new Intent(this, Map.class);
                                intent1.putExtra("list_data", data);
                                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                                        | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                                startActivity(intent1);

                            } else if (Map.markerMap != null
                                    && !Map.markerMap.isEmpty()) {

                                Iterator<HashMap.Entry<Integer, Marker>> it = Map.markerMap
                                        .entrySet().iterator();
                                while (it.hasNext()) {
                                    HashMap.Entry<Integer, Marker> entery = it
                                            .next();
                                    int key = entery.getKey();
                                    Map.marker = Map.markerMap.get(key);
                                    System.out.println("test marker " + Map.marker ); 
                                    //Line 120.
                                    Map.marker .remove();
                                    Map.markerMap.remove(key);

                                    // Marker value = entery.getValue();
                                }
                            }

映射fragmentActivity:

public class Map extends FragmentActivity implements OnMapReadyCallback {

    GoogleMap map;
    static HashMap<Integer, Marker> markerMap = new HashMap<Integer, Marker>();
    static Marker marker = null;

    ...
    }

解决该异常的一个快速方法是将地图更新放入Runnable在主线程上执行(代码如下)。然而,问题的真正答案是您需要重新思考您的设计。中的代码是不安全的IntentService在活动中使用静态数据。使用a的原因有哪些IntentService?地图更新必须在主线程上运行。的目的之一是IntentService是执行以下操作cannot在主线程上完成,并且需要一个后台线程。为什么要使用IntentService当它包含需要主线程的代码时?

    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            Iterator<HashMap.Entry<Integer, Marker>> it = Map.markerMap
                    .entrySet().iterator();
            while (it.hasNext()) {
                HashMap.Entry<Integer, Marker> entery = it
                        .next();
                int key = entery.getKey();
                Map.marker = Map.markerMap.get(key);
                System.out.println("test marker " + Map.marker );
                //Line 120.
                Map.marker.remove();
                // Remove from map using iterator
                it.remove();

                // Marker value = entery.getValue();
            }
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.IllegalStateException:不在主线程上 的相关文章

  • 以编程方式设置 Logback Appender 路径

    我正在尝试以编程方式设置 Logback 附加程序路径 滚动文件附加器 http logback qos ch apidocs ch qos logback core rolling RollingFileAppender html准确地说
  • 方向改变时的类转换异常 (Android)

    我有一个由选项卡活动托管的活动 当我更改屏幕方向时 我的应用程序崩溃了 02 14 21 01 35 825 E AndroidRuntime 9424 java lang RuntimeException Unable to start
  • 从 sbt 程序集运行 uber jar 会导致错误:无法找到或加载主类

    我有一个使用 sbt 程序集插件打包为 uber jar 的 Spark 作业 这build sbt指定一个可运行的 main 作为生成的 uber jar 的目标 mainClass in assembly Some com foo Ba
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • 从代码动态更改多个文本视图的大小(没有“磁盘上”xml 主题)?

    我有 10 个文本视图在我的代码中 我想更改所有代码的字体大小 在我的布局中我使用了 style定义通用属性 但是我不知道一旦布局出现在屏幕上如何从代码中更改它们 我不想做的是更新 AND 对象 但只写在一处 我知道我可以使用应用主题但这假
  • 为什么现在()? (客观化)

    为什么我想要异步加载 Objectify 实体 异步加载到底意味着什么 根据客观化有关加载的文档 https code google com p objectify appengine wiki BasicOperations Loadin
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 我们可以使用 for-each 循环来迭代 Iterator 类型的对象吗? [复制]

    这个问题在这里已经有答案了 如果我们执行以下操作 我们会收到错误 class FGH public static Iterator reverse List list Collections reverse list return list
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 从命令行运行 Maven 插件的语法是什么。

    我看到这里已经有人问过这个问题 如何从命令行执行maven插件 https stackoverflow com questions 12930656 how to execute maven plugin from command line
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢
  • JMockit - 初始化问题

    当我使用以下测试时 我收到警告 警告 JMockit 是按需初始化的 这可能会导致某些测试失败 请检查文档以获取更好的初始化方法 这是我的测试实现 package test import static mockit Mockit impor
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我
  • 无法通过usb调试安装android应用程序

    我知道这是一个老问题 但我第一次尝试在 Redmi note 4 上安装我的应用程序 每当我尝试安装时 它都会显示一个对话框 安装失败 并显示消息无法建立会话 通过卸载现有版本的 apk 如果存在 然后重新安装 可能可以解决此问题 警告 卸
  • H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()

    所以我有一个 DB2 生产数据库 我需要在其中使用可用的函数 ListAgg 我希望使用 H2 的单元测试能够正确测试此功能 不幸的是H2不直接支持ListAgg 但是 我可以创建一个用户定义的聚合函数 import java sql Co
  • 如何在java 1.8中从org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8转换为oracle.jdbc.OracleConnection

    如何在 java 1 8 中从 org jboss jca adapters jdbc jdk8 WrappedConnectionJDK8 转换为 oracle jdbc OracleConnection 目前我正在这样使用并得到以下异常
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换
  • 我找不到 IntelliJ 快捷方式

    我使用 vim 一段时间 我知道有一个 intellij vim 插件 我很好奇内置的 IntelliJ 文本导航存在什么 如何打开实时模板来创建模板 如何查看以 tr 开头的现有模板列表 如何进行全局搜索并在当前文档中进行搜索 然后转到下

随机推荐

  • 何时使用枚举、类或标签?

    假设您有一个特定页面类型的页面 例如普通页面 帐户页面等 页面由 Page 对象表示 我的问题是 如何为页面分配页面类型 我看到这些选项 通过使用 Page 对象中设置的 PageType 枚举 通过使用 PageType 类 并在 Pag
  • 如何使用每列以前的值填充缺失的信息? [复制]

    这个问题在这里已经有答案了 可能的重复 用最新的非 NA 值替换 NA https stackoverflow com questions 7735647 replacing nas with latest non na value 如何使
  • 如何更改node.js中process.env.PORT的值?

    我想改变的值process env PORT 我怎样才能做到这一点 我运行的是 Ubuntu 12 04 仅运行一次 在 unix shell 提示符下 PORT 1234 node app js 更永久 export PORT 1234
  • 如何使用asyncio下载s3存储桶上的文件

    我使用以下代码下载 s3 存储桶中的所有文件 def main bucket name destination dir bucket boto3 resource s3 Bucket bucket name for obj in bucke
  • 在服务中运行 Android TTS

    我试图让 Android 的 TTS 在服务中运行 但我不知道为什么它不起作用 它可以编译 不会崩溃 但它就是不起作用 不过 Toast 通知确实有效 package alarm test import android app Servic
  • 我可以使用 UML 来建模网站导航吗

    我可以使用 UML 对网站导航进行建模吗 如果是的话 有人给我一些书籍 链接以供参考 网站的 UML 之类的 如果不是的话 有哪些工具可以实现这一点 基本上我是一名程序员 当我设计以前的网站时 我只是在纸上勾勒出不同的页面设计想法 然后选择
  • 运行单元测试时禁用温斯顿日志记录?

    在执行节点模块的单元测试时是否可以有选择地禁用 Winston 日志记录 理想情况下 我希望在应用程序运行时进行日志记录以提供信息和调试目的 但在运行测试时不要使演示单元测试结果混乱 我对 winston 的使用是在我的模块内部的 如下所示
  • 无法将类型 void 隐式转换为对象。 .NET MVC 部分视图结果

    我有以下控制器操作 ChildActionOnly public virtual PartialViewResult ListActions int id var actions meetingActionRepository GetAll
  • 使用 RxJava 实现存储库模式

    我正在尝试找出一种更好的方法来实现 Android 中 RxJava 中的存储库模式之类的功能 这是我到目前为止所拥有的 从here https gist github com pieces029 5e92f9003fa1a4ebc59b
  • 如何去除两个顶点之间的边?

    我想删除两个顶点之间的边 所以我在 javatinkerpop3 中的代码如下 private void removeEdgeOfTwoVertices Vertex fromV Vertex toV String edgeLabel Gr
  • 使用 IDisposable 资源进行屈服

    是否有通过可支配资源产生收益的正确方法 返回的对象是 IDisposable 但它迭代的元素是 这是一个例子 public static IEnumerable
  • JPA - 禁用 persistence.xml 的验证

    我正在迈出使用 JPA Hibernate 的第一步 总体思路是连接到遗留数据库来执行复杂的查询 我认为 hibernate 是完成这项任务的绝佳伴侣 但是 首先 我创建了一个 bean persistence xml 和 hibernat
  • 更改文本文件编码

    如何通过代码更改文本文件编码 我正在使用此代码实际创建文件本身 但如何更改编码 更改为 UTF 8 w o BOM string path E Test Example txt if File Exists path File Create
  • Visual Studio XML 文件编辑器小写

    我正在 Visual Studio 中编辑 cshtml 带有 cshtml 文件扩展名 我自动设置格式或粘贴一些 xml 这会触发自动格式 并且 Visual Studio 会小写所有 xml 属性 因此 theAttribute gt
  • Windows 终端中的 Git Bash 在单独的窗口中打开

    我想将 git bash 添加到 Windows 终端 但是 当我在终端中添加新的 git bash 选项卡时 git bash 将在另一个窗口中打开 这是我的配置 guid acrylicOpacity 0 75 closeOnExit
  • "Hello" |> printfn 在 F# 中生成错误

    https tryfsharp fsbolero io https tryfsharp fsbolero io printfn Hello 但是 使用管道运算符可以按预期工作 没有错误 Hello gt printfn 类型 string
  • Xcode 8 AppStore 上传(错误 434)

    当我尝试验证App Store构建使用Xcode 8我收到以下错误 ITunesSoftwareServiceAuthenticationErrorDomain 434 这是什么意思 我多次尝试收到相同的错误 我做了一些更改 对配置文件等
  • 使用Java读取MySQL二进制(16) UUID

    这应该是一个非常简单的问题 我只是在这里遗漏了一些基本的东西 我正在经历 那些日子之一 无法使用 Hibernate 或其他 ORM 使用 Java 准备语句 MySQL 的东西 CREATE TABLE article articleID
  • 使用 ggplot 在背景图像上绘制数据

    我正在尝试在背景图像上绘制一些数据 问题是两个层最终都使用相同的比例 不幸的是 这是有问题的 一个例子 我想绘制一些数据image https dl dropboxusercontent com u 39251 image jpg 正确的
  • java.lang.IllegalStateException:不在主线程上

    当服务器端制造商的表中没有可用数据并且数据对象为空时 我试图从 FragmentActivity 地图中的 Goolge 地图中删除标记 但我收到以下错误 我该如何修复它 Error 07 12 20 53 05 697 E Android