我试图让 Dagger 简单示例在 IntelliJ 中运行,但它在 DemoBaseActivity 类中的 getApplication 调用失败:
public abstract class DemoBaseActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((DemoApplication) getApplication()).inject(this);
}
}
当它遇到注入(inject)方法时,应用程序会静默失败,不会出现任何错误。我使用基类 Activity 的实例而不是 DemoBaseActivity 构建了项目,它部署得很好。
有什么想法吗?
编辑:
当 Activity 的 getApplication() 调用的返回值被转换为自定义 DemoApplication 类型时,它似乎被打破了。
package com.badlogic.androidgames.simple;
import android.app.Application;
import dagger.ObjectGraph;
import java.util.Arrays;
import java.util.List;
public class DemoApplication extends Application
{
private ObjectGraph graph;
@Override
public void onCreate()
{
super.onCreate();
graph = ObjectGraph.create(getModules().toArray());
}
protected List<Object> getModules()
{
return Arrays.asList(new AndroidModule(this), new DemoModule());
}
public void inject(Object object)
{
graph.inject(object);
}
}
编辑:这是堆栈跟踪:
10-03 05:15:25.331: 错误/AndroidRuntime(5035): 致命异常: main java.lang.RuntimeException:无法启动 Activity ComponentInfo {com.badlogic.androidgames.simple/com.badlogic.androidgames.simple.ui.HomeActivity}:java.lang.ClassCastException:android.app.Application 无法转换为 com。 badlogic.androidgames.simple.DemoApplication 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 在 android.app.ActivityThread.access$600(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative( native 方法) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在 dalvik.system.NativeStart.main( native 方法) 由以下原因引起:java.lang.ClassCastException:android.app.Application 无法转换为 com.badlogic.androidgames.simple.DemoApplication 在 com.badlogic.androidgames.simple.DemoBaseActivity.onCreate(DemoBaseActivity.java:33) 在 com.badlogic.androidgames.simple.ui.HomeActivity.onCreate(HomeActivity.java:30) 在 android.app.Activity.performCreate(Activity.java:5133) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
最佳答案
如评论中所述 - 您忘记在 AndroidManifest 文件中提及您的应用程序类。这就是解决方法:
<application
android:name="com.badlogic.androidgames.simple.DemoApplication"
...
>
...
</application>
关于android - Dagger 项目在 getApplication 覆盖时静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720864/