簡體   English   中英

Android Dagger 2無法解析符號構建器()

[英]Android Dagger 2 cannot resolve symbol builder()

我在Android Studio中使用Dagger 2,但是當嘗試通過DaggerMyComponent.builder()。myModule(new MyModule())。build()創建Component時,我總是看到紅色的“ builder() ”這個詞,它說“無法解析符號構建器”。

我必須說我已經多次清理和構建了項目,甚至評論了組件實例並在重建后對其進行了解除。 我還必須說我可以檢查DaggerMyComponent.class,一切似乎都沒問題,事實上,我可以毫無問題地導入該類。

該示例在GithHub上共享,鏈接如下:

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();
    }
}

如果有人知道我錯了什么,那對我來說會很好。 感謝大家。

哦,我已經弄清楚了。

你添加了這一行:

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

它應該是這一行:

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

所以只需刪除new然后就可以了。

@Inject注釋的所有字段都必須是公共的: @Inject public AClass a; 在你的活動中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM