Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Android 从1.0.2-1.0.3升级Kotlin:java.lang.NoSuchMethodError:未提供虚拟方法InjectedData$app_compiledBugKotlin()_Android_Kotlin_Android Espresso_Dagger 2 - Fatal编程技术网

Android 从1.0.2-1.0.3升级Kotlin:java.lang.NoSuchMethodError:未提供虚拟方法InjectedData$app_compiledBugKotlin()

Android 从1.0.2-1.0.3升级Kotlin:java.lang.NoSuchMethodError:未提供虚拟方法InjectedData$app_compiledBugKotlin(),android,kotlin,android-espresso,dagger-2,Android,Kotlin,Android Espresso,Dagger 2,我有一个Kotlin Espresso Dagger2小项目。使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,运行Espresso instrumental test(在MainActivityTest上)时,会出现上述错误 我的Dagger2测试模块如下 @Module open class ApplicationTestModule(protected val mApplication: Application) { @Provides inter

我有一个Kotlin Espresso Dagger2小项目。使用Kotlin 1.0.2时效果很好。迁移到Kotlin 1.0.3后,运行Espresso instrumental test(在MainActivityTest上)时,会出现上述错误

我的Dagger2测试模块如下

@Module
open class ApplicationTestModule(protected val mApplication: Application) {

    @Provides
    internal fun provideApplication(): Application {
        return mApplication
    }

    @Provides
    @Singleton
    internal fun provideInjectedData(): InjectedData {
        return mock(InjectedData::class.java)
    }
}
package com.elyeproj.kotlinespressomock;

import dagger.internal.Factory;
import dagger.internal.Preconditions;
import javax.annotation.Generated;

@Generated(
  value = "dagger.internal.codegen.ComponentProcessor",
  comments = "https://google.github.io/dagger"
)
public final class ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory
    implements Factory<InjectedData> {
  private final ApplicationTestModule module;

  public ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(
      ApplicationTestModule module) {
    assert module != null;
    this.module = module;
  }

  @Override
  public InjectedData get() {
    return Preconditions.checkNotNull(
        module.provideInjectedData$app_compileDebugKotlin(),
        "Cannot return null from a non-@Nullable @Provides method");
  }

  public static Factory<InjectedData> create(ApplicationTestModule module) {
    return new ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(module);
  }
}
dagger2为InjectedData生成的ApplicationTestModule如下所示

@Module
open class ApplicationTestModule(protected val mApplication: Application) {

    @Provides
    internal fun provideApplication(): Application {
        return mApplication
    }

    @Provides
    @Singleton
    internal fun provideInjectedData(): InjectedData {
        return mock(InjectedData::class.java)
    }
}
package com.elyeproj.kotlinespressomock;

import dagger.internal.Factory;
import dagger.internal.Preconditions;
import javax.annotation.Generated;

@Generated(
  value = "dagger.internal.codegen.ComponentProcessor",
  comments = "https://google.github.io/dagger"
)
public final class ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory
    implements Factory<InjectedData> {
  private final ApplicationTestModule module;

  public ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(
      ApplicationTestModule module) {
    assert module != null;
    this.module = module;
  }

  @Override
  public InjectedData get() {
    return Preconditions.checkNotNull(
        module.provideInjectedData$app_compileDebugKotlin(),
        "Cannot return null from a non-@Nullable @Provides method");
  }

  public static Factory<InjectedData> create(ApplicationTestModule module) {
    return new ApplicationTestModule_ProvideInjectedData$app_compileDebugKotlinFactory(module);
  }
}
package com.elyeproj.kotlinespressomock;
进口匕首。国内。工厂;
导入dagger.internal.preditions;
导入javax.annotation.Generated;
@产生(
value=“dagger.internal.codegen.ComponentProcessor”,
评论=”https://google.github.io/dagger"
)
公共最终类应用程序测试模块\u提供输入数据$app\u编译的Bugkotlinfactory
机具厂{
私有最终应用测试模块;
公共应用程序测试模块\u提供输入数据$app\u编译的BugKotInfactory(
ApplicationTestModule(模块){
断言模块!=null;
this.module=模块;
}
@凌驾
公共注入数据get(){
返回前提条件。checkNotNull(
module.provideInjectedData$app_compiledBugkotlin(),
“无法从非@Nullable@Provides方法返回null”);
}
公共静态工厂创建(ApplicationTestModule模块){
返回新的ApplicationTestModule\u providedInjectedData$app\u compiledBugkotlinfactory(模块);
}
}
其中,AndroidStudio无法解析
提供的导入数据$app\u compiledBugKotlin()
。测试运行失败

我重申,当使用Kotlin 1.0.2(1.0.1-2)时,上述函数也存在,但AndroidStudio无法解析。但测试仍在运行

这是科特林问题还是匕首问题?我如何解决这个问题


要复制此问题,可以在中找到代码。只需将
ext.KOTLIN_VERSION='1.0.1-2'
更改为
ext.KOTLIN_VERSION='1.0.3'
,然后在AndroidTest中运行
MainActivityTest

我自己也遇到过此类问题,我认为这与方法的
内部可见性有关。如果你将它们公开,问题可能会得到解决。但我也很想知道根本原因是什么。谢谢@Androidx!这就解决了问题。是的,希望Dagger的人能提供这种见解。我自己也遇到过这种问题,我认为这与你的方法的
内部
可见性有关。如果你将它们公开,问题可能会得到解决。但我也很想知道根本原因是什么。谢谢@Androidx!这就解决了问题。是的,希望Dagger的人能提供这方面的见解。