Android Dagger 2 无法解析符号生成器()
Android Dagger 2 cannot resolve symbol builder()
我在 Android Studio 中使用 Dagger 2,但是当尝试通过 DaggerMyComponent.builder().myModule(new MyModule()).build() 创建组件时,我总是看到红色的“builder()”这个词,上面写着"cannot resolve symbol builder"。
我必须说我已经清理和构建 项目很多次,甚至评论组件实例并在重建后取消注释。
我还必须说,我可以检查 DaggerMyComponent.class,一切似乎都正常,事实上,我可以毫无问题地导入 class。
该示例已在 GithHub 上共享,地址为 link:
https://github.com/alessandroargentieri/LetsDagger2Together
我有两个 类:BClass 和 AClass,这取决于第一个。
我有 ABModule.class 工厂方法和 ABComponent 组件接口。
DaggerABComponent 被创建到 WholeApplication.class 中,它扩展了 Application.
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();
}
}
如果有人知道我的错误,那将对我很好。谢谢大家。
所有带有@Inject 注释的字段必须是public:
@Inject public AClass a;
在你的 Activity
哦,我想通了。
您添加了这一行:
component = new DaggerABComponent.builder().aBModule(new ABModule()).build();
应该是这一行:
component = DaggerABComponent.builder().aBModule(new ABModule()).build();
所以只要删除 new
就可以了。
我在 Android Studio 中使用 Dagger 2,但是当尝试通过 DaggerMyComponent.builder().myModule(new MyModule()).build() 创建组件时,我总是看到红色的“builder()”这个词,上面写着"cannot resolve symbol builder"。
我必须说我已经清理和构建 项目很多次,甚至评论组件实例并在重建后取消注释。 我还必须说,我可以检查 DaggerMyComponent.class,一切似乎都正常,事实上,我可以毫无问题地导入 class。
该示例已在 GithHub 上共享,地址为 link:
https://github.com/alessandroargentieri/LetsDagger2Together
我有两个 类:BClass 和 AClass,这取决于第一个。 我有 ABModule.class 工厂方法和 ABComponent 组件接口。 DaggerABComponent 被创建到 WholeApplication.class 中,它扩展了 Application.
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();
}
}
如果有人知道我的错误,那将对我很好。谢谢大家。
所有带有@Inject 注释的字段必须是public:
@Inject public AClass a;
在你的 Activity
哦,我想通了。
您添加了这一行:
component = new DaggerABComponent.builder().aBModule(new ABModule()).build();
应该是这一行:
component = DaggerABComponent.builder().aBModule(new ABModule()).build();
所以只要删除 new
就可以了。