在Android 7.0上开发的应用程序在连接到Azure EventHub时抛出NoClassDefFoundError [英] App developed on Android 7.0 throws NoClassDefFoundError while connecting to Azure EventHub

查看:94
本文介绍了在Android 7.0上开发的应用程序在连接到Azure EventHub时抛出NoClassDefFoundError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们创建了一个Azure事件中心,并在执行以下代码行时遇到异常.我们收到以下异常,其中Android Studio建议Java/time/Duration仅适用于API级别26及更高版本.

We have created an Azure Event Hub and are getting an exception when the following line of code is executed. we are getting the below exception where in Android studio suggests that java/time/Duration is available only for API level 26 and above. 

是否有可用的EventHub库支持Android 7.0?

EventHubClient client = EventHubClient.createSync(conn.toString(), Executors.newSingleThreadExecutor());

我们收到以下异常.

    demo.eventhubsample E/AndroidRuntime:致命异常:main

   流程:demo.eventhubsample,PID:24833

    java.lang.NoClassDefFoundError:无法解决以下问题:Ljava/time/Duration;

       在com.microsoft.azure.eventhubs.impl.MessagingFactory.< clinit>(MessagingFactory.java:46)

       在com.microsoft.azure.eventhubs.impl.EventHubClientImpl.create(EventHubClientImpl.java:53)

在com.microsoft.azure.eventhubs.EventHubClient $ -CC.create(EventHubClient.java:84)

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.lambda $ createSync $ 0(EventHubClient.java:50)

       在com.microsoft.azure.eventhubs.-$$ Lambda $ EventHubClient $ c5UbZzYQx71Hbh8oGZBMd2lKXRw.execute(lambda)

在com.microsoft.azure.eventhubs.impl.ExceptionUtil.syncWithIOException(ExceptionUtil.java:200)

在com.microsoft.azure.eventhubs.EventHubClient $ -CC.createSync(EventHubClient.java:50)

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.createSync(EventHubClient.java:35)

在demo.eventhubsample.MainActivity.sendEvent(MainActivity.java:65)

在demo.eventhubsample.MainActivity $ 1.onClick(MainActivity.java:44)

在android.view.View.performClick(View.java:5714)

在android.widget.TextView.performClick(TextView.java:10926)

       在android.view.View $ PerformClick.run(View.java:22589)

       在android.os.Handler.handleCallback(Handler.java:739)

在android.os.Handler.dispatchMessage(Handler.java:95)

       在android.os.Looper.loop(Looper.java:148)

       在android.app.ActivityThread.main(ActivityThread.java:7325)

       在java.lang.reflect.Method.invoke(本机方法)

       在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)

       在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

    由以下原因引起:java.lang.ClassNotFoundException:找不到类"java.time.Duration".在路径上:DexPathList [[zip文件"/data/app/demo.eventhubsample-1/base.apk"],nativeLibraryDirectories=[/data/app/demo.eventhubsample-1/lib/arm, /vendor/lib,/system/lib]]

     Caused by: java.lang.ClassNotFoundException: Didn't find class "java.time.Duration" on path: DexPathList[[zip file "/data/app/demo.eventhubsample-1/base.apk"],nativeLibraryDirectories=[/data/app/demo.eventhubsample-1/lib/arm, /vendor/lib, /system/lib]]

       在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)

       在java.lang.ClassLoader.loadClass(ClassLoader.java:511)

       在java.lang.ClassLoader.loadClass(ClassLoader.java:469)

       位于com.microsoft.azure.eventhubs.impl.MessagingFactory.< clinit>(MessagingFactory.java:46) 

       在com.microsoft.azure.eventhubs.impl.EventHubClientImpl.create(EventHubClientImpl.java:53) 

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.create(EventHubClient.java:84) 

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.lambda $ createSync $ 0(EventHubClient.java:50)中

       在com.microsoft.azure.eventhubs.-$$ Lambda $ EventHubClient $ c5UbZzYQx71Hbh8oGZBMd2lKXRw.execute(lambda) 

       在com.microsoft.azure.eventhubs.impl.ExceptionUtil.syncWithIOException(ExceptionUtil.java:200) 

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.createSync(EventHubClient.java:50) 

       在com.microsoft.azure.eventhubs.EventHubClient $ -CC.createSync(EventHubClient.java:35) 

       在demo.eventhubsample.MainActivity.sendEvent(MainActivity.java:65)上

       在demo.eventhubsample.MainActivity $ 1.onClick(MainActivity.java:44)上

在android.view.View.performClick(View.java:5714) 

在android.widget.TextView.performClick(TextView.java:10926)上

在android.view.View $ PerformClick.run(View.java:22589) 

在android.os.Handler.handleCallback(Handler.java:739) 

       在android.os.Handler.dispatchMessage(Handler.java:95) 

在android.os.Looper.loop(Looper.java:148) 

       位于android.app.ActivityThread.main(ActivityThread.java:7325) 

在java.lang.reflect.Method.invoke(本机方法)处

       在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)上

       在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)上

             禁止:java.lang.ClassNotFoundException:java.time.Duration

       在java.lang.Class.classForName(本机方法)

在java.lang.BootClassLoader.findClass(ClassLoader.java:781)

在java.lang.BootClassLoader.loadClass(ClassLoader.java:841)

在java.lang.ClassLoader.loadClass(ClassLoader.java:504)

        ] ...还有21个

    原因:java.lang.NoClassDefFoundError:使用引导类加载器找不到类;没有可用的堆栈跟踪

使用的依赖项

 implementation 'com.microsoft.azure:azure-eventhubs:1.3.0'

gradle中定义的API级别

API Level defined in gradle

 minSdkVersion  21 
 targetSdkVersion 26

Java版本

 compileOptions { 
        sourceCompatibility JavaVersion.VERSION_1_8 
        targetCompatibility JavaVersion.VERSION_1_8 
    }

推荐答案

此GitHub中讨论了相同的问题

The same issue was discussed in this GitHub issue.

SDK始终需要Java8.您可以尝试使用 问题中提到的REST API .

The SDK always required Java 8. You could try to use the REST API as mentioned in the issue.


这篇关于在Android 7.0上开发的应用程序在连接到Azure EventHub时抛出NoClassDefFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆