Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未能解析:Lcom/google/common/collect/ImmutableMap;位于com.my.app.di.daggermyaapplicationComponent.GetMapofClassOfDataProviderOffFactoryof(_Java_Android_Android Studio_Dependency Injection_Dagger 2 - Fatal编程技术网

Java 未能解析:Lcom/google/common/collect/ImmutableMap;位于com.my.app.di.daggermyaapplicationComponent.GetMapofClassOfDataProviderOffFactoryof(

Java 未能解析:Lcom/google/common/collect/ImmutableMap;位于com.my.app.di.daggermyaapplicationComponent.GetMapofClassOfDataProviderOffFactoryof(,java,android,android-studio,dependency-injection,dagger-2,Java,Android,Android Studio,Dependency Injection,Dagger 2,在运行应用程序时集成Dagger 2以实现ImageDownloader库的依赖项注入后,我遇到了这个问题 这就是我所做的: 在build.gradle中,我添加了以下行: implementation "com.google.dagger:dagger:2.16" implementation "com.google.dagger:dagger-android-support:2.16" annotationProcessor "com.google.dagger:dagger-compile

在运行应用程序时集成Dagger 2以实现ImageDownloader库的依赖项注入后,我遇到了这个问题

这就是我所做的:

在build.gradle中,我添加了以下行:

implementation "com.google.dagger:dagger:2.16"
implementation "com.google.dagger:dagger-android-support:2.16"
annotationProcessor "com.google.dagger:dagger-compiler:2.16"
annotationProcessor "com.google.dagger:dagger-android-processor:2.16"
public class MainActivity extends Activity {

    @Inject
    ImageDownloaderApi imageDownloaderApi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
这是我的类API,我想在其中将依赖项与活动类分开:

public class ImageDownloaderApi {

    @Inject
    public ImageDownloaderApi(){
    }

    //some other methods here
}
在我的主要活动中,我添加了以下几行:

implementation "com.google.dagger:dagger:2.16"
implementation "com.google.dagger:dagger-android-support:2.16"
annotationProcessor "com.google.dagger:dagger-compiler:2.16"
annotationProcessor "com.google.dagger:dagger-android-processor:2.16"
public class MainActivity extends Activity {

    @Inject
    ImageDownloaderApi imageDownloaderApi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
然后创建了一个应用程序对象:

然后通过清单注册应用程序类,如下所示:

<application
    android:name=".MyApplication"
@Module
public abstract class MyApplicationModule {
    @ContributesAndroidInjector
    abstract MainActivity contributeActivityInjector();
}
我创建了一个名为MyApplicationComponent的接口:

现在,在我在emulator中运行应用程序时,在执行此实现之后,应用程序会崩溃,并出现以下日志:

  --------- beginning of crash
11-20 14:51:03.201 6745-6745/com.my.app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.my.app, PID: 6745
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/collect/ImmutableMap;
    at com.my.app.di.DaggerMyApplicationComponent.getMapOfClassOfAndProviderOfFactoryOf(DaggerMyApplicationComponent.java:36)
    at com.my.app.di.DaggerMyApplicationComponent.getDispatchingAndroidInjectorOfActivity(DaggerMyApplicationComponent.java:42)
    at com.my.app.di.DaggerMyApplicationComponent.injectMyApplication(DaggerMyApplicationComponent.java:68)
    at com.my.app.di.DaggerMyApplicationComponent.inject(DaggerMyApplicationComponent.java:62)
    at com.my.app.di.DaggerMyApplicationComponent.inject(DaggerMyApplicationComponent.java:16)
    at com.my.app.di.MyApplication.onCreate(MyApplication.java:19)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553)
    at android.app.ActivityThread.access$1500(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.common.collect.ImmutableMap" on path: DexPathList[[zip file "/data/app/com.my.app-1/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app-1/lib/x86, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
    at com.my.app.di.DaggerMyApplicationComponent.getMapOfClassOfAndProviderOfFactoryOf(DaggerMyApplicationComponent.java:36) 
    at com.my.app.di.DaggerMyApplicationComponent.getDispatchingAndroidInjectorOfActivity(DaggerMyApplicationComponent.java:42) 
    at com.my.app.di.DaggerMyApplicationComponent.injectMyApplication(DaggerMyApplicationComponent.java:68) 
    at com.my.app.di.DaggerMyApplicationComponent.inject(DaggerMyApplicationComponent.java:62) 
    at com.my.app.di.DaggerMyApplicationComponent.inject(DaggerMyApplicationComponent.java:16) 
    at com.my.app.di.MyApplication.onCreate(MyApplication.java:19) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:151) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
        Suppressed: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableMap
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 18 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
更多信息。我在上面发布日志之前也收到了这条警告线

11-20 14:51:03.172 6745-6745/? E/libprocessgroup: failed to make and chown /acct/uid_10058: Read-only file system

正如@EpicPandaForce对番石榴版本不匹配的评论。我知道Dagger 2需要番石榴,所以我在build.gradle文件中添加了番石榴库,问题得到了解决

在build.gradle中添加此行:


正如@EpicPandaForce对番石榴版本不匹配的评论。我知道Dagger 2需要番石榴,所以我在build.gradle文件中添加了番石榴库,问题得到了解决

在build.gradle中添加此行:


听起来像是Guava版本不匹配。但无法告诉您谁与谁冲突。另一种可能性是,如果您的图像加载程序库是库模块,那么它应该将Dagger指定为api而不是实现。您对Dagger有其他依赖项吗?我只是在build.gradle.implementati中有这些Dagger依赖项在com.google.dagger:dagger:2.16实现com.google.dagger:dagger android支持:2.16 annotationProcessor com.google.dagger:dagger编译器:2.16 annotationProcessor com.google.dagger:dagger android处理器:2。16@EpicPandaForce谢谢你的建议。我刚刚在build.gradle文件中添加了guava api。问题已经解决。谢谢例如Guava版本不匹配。但无法告诉您谁与谁冲突。另一种可能性是,如果图像加载程序库是库模块,那么它应该将Dagger指定为api而不是实现。Dagger是否有其他依赖项?我只是在build.gradle.imple中有这些Dagger依赖项dagger:dagger android支持:2.16 annotationProcessor com.google.dagger:dagger编译器:2.16 annotationProcessor com.google.dagger:dagger android处理器:2。16@EpicPandaForce谢谢你的建议。我只是在build.gradle文件中添加了番石榴api。问题解决了1.再次感谢
11-20 14:51:03.172 6745-6745/? E/libprocessgroup: failed to make and chown /acct/uid_10058: Read-only file system
 api 'com.google.guava:guava:24.1-android'