Dagger项目在getApplication覆盖时无声地失败

时间:2013-11-01 04:35:31

标签: android intellij-idea dagger

我正在尝试在IntelliJ中运行Dagger简单示例,但它在DemoBaseActivity类中的getApplication调用失败:

public abstract class DemoBaseActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    ((DemoApplication) getApplication()).inject(this);
  }
}

当它点击注入方法时,应用程序无提示失败,没有错误。我使用基类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:ERROR / AndroidRuntime(5035):致命异常:主要         java.lang.RuntimeException:无法启动活动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)         at java.lang.reflect.Method.invokeNative(Native Method)         在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)         at dalvik.system.NativeStart.main(Native Method)         引起: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)

1 个答案:

答案 0 :(得分:11)

如评论中所述 - 您忘记在AndroidManifest文件中提及您的应用程序类。这就是解决方法:

<application
    android:name="com.badlogic.androidgames.simple.DemoApplication"
...
>

...
</application>