gpt4 book ai didi

java - NoSuchMethodError 使用 API 连接到服务器

转载 作者:行者123 更新时间:2023-12-01 18:22:39 25 4
gpt4 key购买 nike

我又回到了 Android。我已经很多年没有尝试为 Android 编程了。我在 Java 方面有多年的经验,但对于 Android,我认为自己是个新手。

我已经使用 Android Studio 的模拟器启动并运行了一个简单的 Android 应用程序。

当我尝试使用我们的内部 API 连接到服务器时,我收到了一个错误,而在 Java 应用程序中使用该 API 时我没有看到该错误。

2020-02-18 10:49:08.723 11033-11033/com.company.monitor E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.monitor, PID: 11033
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)
at com.company.client.api.PingPongSender.setupExecutorThread(PingPongSender.java:68)
at com.company.client.api.PingPongSender.<init>(PingPongSender.java:64)
at com.company.client.api.ServiceContext.<init>(ServiceContext.java:34)
at com.company.monitor.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:7802)

PingPongSender.java:68 正在调用 ExecutorService。它是一个负责向服务器发送 Ping 并接收返回的 Pong 的类。 API 发送和接收 Google Protobuf 消息。

executor = Executors.newSingleThreadExecutor(new ThreadFactory("Executor"));
executor.execute(() -> {
boolean doRun = true;
while (doRun) {
try {
Runnable task = jobQueue.take();
task.run();
} catch (InterruptedException e) {
logger.log(Level.WARN, "Failed to execute runnable or service was interrupted.", e);
doRun = false;
}
}
});

运行 Android Studio 3.5.3。模拟器“Nexus 5X API 29 x86”,Java 8。

编辑:pastebin 的 PingPongSender https://pastebin.com/5YH51iv5

编辑:发现一个类似的问题,它的答案让我重新检查我的应用程序是否使用 Java 8 兼容性。我应该早点看到它。我使用了几个搜索短语,但可惜之前没有结果。 No static method metafactory

最佳答案

AFAIU 似乎有两种类型的 newSingleThreadExecutor 如下所述

  1. public static ExecutorService newSingleThreadExecutor() https://developer.android.com/reference/java/util/concurrent/Executors#newSingleThreadExecutor()

  2. public static ExecutorService newSingleThreadExecutor (ThreadFactory threadFactory) https://developer.android.com/reference/java/util/concurrent/Executors#newSingleThreadExecutor(java.util.concurrent.ThreadFactory)

解决方案可能是改变你的

executor = Executors.newSingleThreadExecutor("Executor");

executor = Executors.newSingleThreadExecutor();

关于java - NoSuchMethodError 使用 API 连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60278622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com