【发布时间】:2020-05-22 03:00:12
【问题描述】:
我是 Retrofit 和 Dagger 的新手,我遇到了一个致命异常:API 声明必须是接口。在以下示例中被抛出:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
findViewById(R.id.test_network_button).setOnClickListener(this);
progressBar = findViewById(R.id.progress_bar);
viewModel = ViewModelProviders.of(this, providerFactory).get(NetworkViewModel.class);
ViewModelProviderFactory.java:
public class ViewModelProviderFactory implements ViewModelProvider.Factory {
private static final String TAG = "ViewModelProviderFactor";
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;
@Inject
public ViewModelProviderFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
this.creators = creators;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
Provider<? extends ViewModel> creator = creators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : creators.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if (creator == null) {
throw new IllegalArgumentException("unknown model class " + modelClass);
}
try {
return (T) creator.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
NetworkModule.java:
@Module
public class NetworkModule {
@Singleton
@Provides
static StudioDataApi provideNetworkApi(Retrofit retrofit) {
return retrofit.create(StudioDataApi.class);
}
}
完整的 Logcat 错误: https://pastebin.com/V0hqrEc6
附言
非常感谢任何建议/提示/想法!
【问题讨论】:
-
虽然,我看不到你在哪里初始化
RetroFit或它的回调,但请检查 this。 -
我认为错误可能在
StudioDataApi,您能发布一下这个的定义吗?
标签: java android retrofit retrofit2 dagger-2