【问题标题】:Dagger project failing silently on getApplication overrideDagger 项目在 getApplication 覆盖上静默失败
【发布时间】:2013-11-12 07:20:14
【问题描述】:

我正在尝试让 Dagger 简单示例在 IntelliJ 中运行,但它在 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:错误/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) 在 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) 在 dalvik.system.NativeStart.main(本机方法) 原因: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)

【问题讨论】:

  • 您能否详细说明您认为它失败的原因?
  • 当 Activity 的 getApplication() 调用的返回值被强制转换为自定义 DemoApplication 类型时,它似乎会中断。
  • 请粘贴堆栈跟踪!
  • 啊哈。找到堆栈跟踪。
  • 您是否在 AndroidManifest 中指定了应用程序?

标签: android intellij-idea dagger


【解决方案1】:

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

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

...
</application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2018-07-08
    • 2021-06-23
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多