android - dagger 简单示例给出了 IllegalStateException

标签 android dagger

我正在尝试 Dagger。现在我不完全明白一切是如何运作的。 所以我写了一个测试项目。

这是我的主要 Activity :

public class MainActivity extends Activity {
    private ObjectGraph mActivityGraph;
    @Inject Vehicle car;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActivityGraph = ObjectGraph.create(new ActivityModule());
        mActivityGraph.validate();
        mActivityGraph.inject(this);
    }
}

这是我的 Activity 模块:

@Module(
        injects =
                {
                        Vehicle.class,
                        MainActivity.class,
                        Wheels.class
                }
)
public class ActivityModule extends Application{

    @Provides Wheels provideWheels()
    {
        return new Wheels(4,"X12");
    }
}

在我的 list 中,我添加了 ActivityModule 作为应用程序的名称。

这是我的车辆类别:

@Module(
        includes = Wheels.class
)
public class Vehicle {
    @Inject
    Wheels wheels;
    private String type;

    public Vehicle(String type) {
        this.type = type;
    }
}

这是我的轮子:

public class Wheels {
    private int inch;
    private String brand;

    @Inject
    public Wheels(int inch, String brand) {
        this.inch = inch;
        this.brand = brand;
    }
}

现在我想要完成的是我在 MainActivity 中有一辆汽车注入(inject)了他的轮子。现在我不知道如何在 mainActivity 中创建我的汽车,因为我想创建一辆汽车,其参数为用户填写的字符串。

我明白了:

Error:(8, 8) error: Graph validation failed: No @Module on edu.ida.daggertest.app.Wheels
Error:(20, 8) error: Unknown error java.lang.IllegalStateException thrown by javac in graph validation: Unable to create binding for edu.ida.daggertest.app.Vehicle

最佳答案

我发现了问题。这是我编辑的代码。问题在于图表之外的创建。

public class MainActivity extends Activity {
    final static String TAG = MainActivity.class.getName();
    private ObjectGraph mActivityGraph;
    @Inject
    Vehicle car;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActivityGraph = ObjectGraph.create(new ActivityModule());
        mActivityGraph.inject(this);

       Log.d(TAG,String.valueOf(car.getWheels().getInch()));
       Log.d(TAG,car.getWheels().getBrand());
    }
}


@Module(
        injects =
                {
                        Vehicle.class,
                        MainActivity.class,
                        Wheels.class
                },
        complete = false
)
public class ActivityModule{

    @Provides Wheels provideWheels()
    {
        return new Wheels(4,"X12");
    }
}

public class Vehicle {

    @Inject
    Wheels wheels;
    private String type;

    public String getType() {
        return type;
    }

    public Wheels getWheels() {
        return wheels;
    }
}

public class Wheels {
    private int inch;
    private String brand;

    @Inject
    public Wheels(int inch, String brand) {
        this.inch = inch;
        this.brand = brand;
    }

    public int getInch() {
        return inch;
    }

    public String getBrand() {
        return brand;
    }
}

completes false 是必需的,否则 dagger 会提示可注入(inject)构造函数 Integer 和 String。

关于android - dagger 简单示例给出了 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23216174/

相关文章:

android - 在 main.py 中导入第三方 (pygoogle) 库以通过 buildozer 制作 android apk 时遇到问题

java - 如何使用 Dagger 2 注入(inject) Servlet?

java - Dagger 输出 java (char)134 不起作用 cp1252

android - Dagger2 与 Android 中的应用程序类

android - 如何使 TextView 的每个单词都可点击?

android - 通过 JNI 调用简单的 java 静态方法不起作用,尽管 C++ 编译并运行它

java - 如何读取 HTTP 输入流?

Android:暂停和恢复 Activity 中的线程

java - 在 Dagger 中注入(inject)返回 null

android - 迁移到 Dagger 2.12 并测试模块覆盖