【问题标题】:Android Dagger 2 cannot resolve symbol builder()Android Dagger 2 无法解析符号生成器()
【发布时间】:2016-10-23 03:25:43
【问题描述】:

我在 Android Studio 中使用 Dagger 2,但是当尝试通过 DaggerMyComponent.builder().myModule(new MyModule()).build() 创建组件时,我总是看到这个词红色的“builder()”表示“无法解析符号生成器”。

我必须说我已经清理和构建了很多次项目,甚至评论了组件实例并在重建后取消了它。 我还必须说,我可以检查 DaggerMyComponent.class,一切似乎都很好,实际上,我可以毫无问题地导入该类。

该示例在 GithHub 上共享,在此链接:

https://github.com/alessandroargentieri/LetsDagger2Together

我有两个类:BClass 和 AClass,这取决于第一个。 我有 ABModule.class 这是工厂方法和 ABComponent 这是组件接口。 DaggerABComponent 被创建到扩展 Application 的 WholeApplication.class 中。

package mawashi.alex.letsdagger2together.Application;

import android.app.Application;
import mawashi.alex.letsdagger2together.DaggerClasses.ABComponent;
import mawashi.alex.letsdagger2together.DaggerClasses.ABModule;
import mawashi.alex.letsdagger2together.DaggerClasses.DaggerABComponent;

public class WholeApplication extends Application {
    static ABComponent component;

    @Override
    public void onCreate() {
        super.onCreate();
        //here is where builder() is not recognized
        component = new DaggerABComponent.builder().aBModule(new ABModule()).build();

    }

    public static ABComponent getComponent(){
        return component;
    }
}

模块:

package mawashi.alex.letsdagger2together.DaggerClasses;

import dagger.Module;
import dagger.Provides;
import mawashi.alex.letsdagger2together.Model.AClass;
import mawashi.alex.letsdagger2together.Model.BClass;

@Module
public class ABModule {

    @Provides
    public BClass provideBClass(){
       return new BClass("xxx");
    }

    @Provides
    public AClass provideAClass(BClass bClass){
       return new AClass(bClass);
    }
}

组件:

package mawashi.alex.letsdagger2together.DaggerClasses;

import dagger.Component;
import mawashi.alex.letsdagger2together.MainActivity;

@Component (modules = {ABModule.class})
public interface ABComponent {
    public void inject(MainActivity mainActivity);
}

要注入的类:

package mawashi.alex.letsdagger2together.Model;

public class BClass {
    private String xfactor;
    public BClass(String xfactor){
        this.xfactor = xfactor;
    }
    public String getXfactor(){
        return xfactor;
    }
}


package mawashi.alex.letsdagger2together.Model;

public class AClass {
    private BClass b;
    public AClass(BClass b){
        this.b = b;
    }
    public String getYfactor(){
        return "Y-" + b.getXfactor() + "-Y";
    }
}

注入AClass和BClass的地方:

package mawashi.alex.letsdagger2together;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import javax.inject.Inject;

import mawashi.alex.letsdagger2together.Application.WholeApplication;
import mawashi.alex.letsdagger2together.DaggerClasses.ABModule;
import mawashi.alex.letsdagger2together.DaggerClasses.DaggerABComponent;
import mawashi.alex.letsdagger2together.Model.AClass;

public class MainActivity extends AppCompatActivity {

    @Inject AClass a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WholeApplication.getComponent().inject(this);

        Toast.makeText(this, a.getYfactor(),Toast.LENGTH_LONG).show();
    }
}

如果有人知道我的错误,那对我非常好。谢谢大家。

【问题讨论】:

  • 请分享您的代码以查看缺少的内容..
  • 看看上面写的 GitHub 链接...特别是 ABModule、ABComponent、WholeApplication 类...谢谢!!

标签: android dagger-2 dagger


【解决方案1】:

哦,我想通了。

你添加了这一行:

    component = new DaggerABComponent.builder().aBModule(new ABModule()).build();

应该是这一行:

    component = DaggerABComponent.builder().aBModule(new ABModule()).build();

所以只需删除 new 即可。

【讨论】:

  • 太棒了!感谢您的处置!
【解决方案2】:

所有带有@Inject 注解的字段都必须是公开的: @Inject public AClass a; 在你的活动中

【讨论】:

  • 我已经发布了各种课程。如您所见,我使用了所有正确的注释,并且检查了 DaggerABComponent.class 是否已创建
  • 我改了答案
  • 包保护就够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 2016-06-15
  • 2017-02-09
  • 2015-12-28
  • 2016-03-03
相关资源
最近更新 更多