我正在尝试像在这个例子中那样创建一个 viewmodel 模块,但我遇到了这个错误
错误:java.util.Map,javax.inject.Provider> 不能在没有 @Provides-annotated 方法的情况下提供。
我遵循了所有示例,这是我的代码
ViewModelFactory 类
@Singleton
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> mCreators;
@Inject
ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
mCreators = creators;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
Provider<? extends ViewModel> creator = mCreators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : mCreators
.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if …Run Code Online (Sandbox Code Playgroud)我正在尝试将 build.gradle 文件迁移到 buildSrc 目录中的 build.gradle.kts 。请注意,在我的 buildSrc 中,我已经使用 java-gradle-plugin 并使用 org.gradle.api 中的 api 创建了一个 gradle 插件,例如插件、项目等。但是当我配置脚本时,我在文件中得到了一个未解析的引用,该引用使用 org .gradle.api
这是 build.gradle 文件的代码
plugins {
id 'java'
id 'java-gradle-plugin'
id 'org.jetbrains.kotlin.jvm' version '1.3.21'
}
gradlePlugin {
plugins {
netguard {
id = 'pluginId'
implementationClass = 'myplugin.plugin.awesomeplugin'
}
}
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
这是迁移后的 build.gradle.kts
import org.gradle.kotlin.dsl.*
import …Run Code Online (Sandbox Code Playgroud) 我试图对下面的一些util类进行单元测试:
public final class WalletInputValidationUtils {
private WalletInputValidationUtils() {
}
public static boolean isEmailValid(CharSequence email) {
return Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试班
@RunWith(PowerMockRunner.class)
public class WalletInputValidationUtilsTest {
private static final CharSequence DUMMY_EMAIL = "email@gmail.com";
@Test
public void isEmailValidTest1() {
Assert.assertTrue(isEmailValid(DUMMY_EMAIL));
}
}
Run Code Online (Sandbox Code Playgroud)
我在这行有空指针异常
return Patterns.EMAIL_ADDRESS.matcher(email).matches();
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪
java.lang.NullPointerException
at kudo.mobile.app.wallet.backwardcompatibility.WalletInputValidationUtils.isEmailValid(WalletInputValidationUtils.java:14)
at kudo.mobile.app.wallet.backwardcompatibility.WalletInputValidationUtilsTest.isEmailValidTest(WalletInputValidationUtilsTest.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunne
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?谢谢
android ×3
java ×2
build.gradle ×1
dagger-2 ×1
kotlin ×1
mockito ×1
unit-testing ×1
viewmodel ×1