当前位置: 首页 > 知识库问答 >
问题:

Dagger 2演示器注入返回null

谈禄
2023-03-14
  1. 登录扩展基本活动
  2. 导航活动扩展基本活动
  3. 兆瓦活动范围导航活动

演示者注入在登录和导航活动中运行良好,与在MW活动中一样,它返回null

黄油刀在MW活动中也不工作,在其他活动中工作良好

public class abcApplication extends Application {
    ApplicationComponent mApplicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();


        mApplicationComponent = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this))
                .build();
        mApplicationComponent.inject(this);
    }

    public static abcApplication get(Context context) {
        return (abcApplication) context.getApplicationContext();
    }

    public ApplicationComponent getComponent() {
        return mApplicationComponent;
    }

    // Needed to replace the component with a test specific one
    public void setComponent(ApplicationComponent applicationComponent) {
        mApplicationComponent = applicationComponent;
    }


}
public class BaseActivity extends AppCompatActivity {
    private ActivityComponent mActivityComponent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    public ActivityComponent activityComponent() {
        if (mActivityComponent == null) {
            mActivityComponent = DaggerActivityComponent.builder()
                    .activityModule(new ActivityModule(this))
                    .applicationComponent(abcApplication.get(this).getComponent())
                    .build();
        }
        return mActivityComponent;
    }

}
public class NavigationActivity extends BaseActivity implements NavigationView {

    @Inject
    DataClient mDataClient;

    @Bind(R.id.drawer_layout)
    protected DrawerLayout mDrawerLayout;
    @Bind(R.id.navList)
    ExpandableListView mExpandableListView;

    private ActionBarDrawerToggle mDrawerToggle;
    private String mActivityTitle;
    private ExpandableListAdapter mExpandableListAdapter;
    private List<String> mExpandableListTitle;
    private Map<String, List<String>> mExpandableListData;

    private Map<String, String> activityMap;

    private int lastExpandedPosition = -1;

    @Inject
    NavigationPresenter navigationPresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);
        activityComponent().inject(this);
        ButterKnife.bind(this);
        navigationPresenter.attachView(this);


        }
    @Override
    protected void onDestroy() {
    super.onDestroy();
    navigationPresenter.detachView();
    }
        }
public class MWActivity extends NavigationActivity implements MWView{
    private MWPagerAdapter mMWPagerAdapter;


    @Inject
    MWPresenter MWPresenter;

    private ViewPager mViewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        DrawerLayout mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);

        ButterKnife.bind(this);

        MWPresenter.attachView(this);
        MWPresenter.getMarketData();
        }

    }

java.lang.runtimeException:无法启动活动ComponentInfo{com.abc.xyz/com.abc.trading.xyz.ui.main.mw.view.mwactivity}:java.lang.nullpointerException at android.app.activitythread.performLaunchActivity(activitythread.java:2318)at android.app.activitythread.handlelaunchActivity(activitythread.java:2396)

@PreActivity
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class)

    public interface ActivityComponent {

        void inject(LoginActivity loginActivity);
        void inject(NavigationActivity navigationActivity);
        void inject(MWActivity mWActivity);
        void inject(MWTabFragment mWTabFragment);
        void inject(MWDetailsActivity mWDetailsActivity);


    }

共有1个答案

邓嘉致
2023-03-14

您手头有两个关于超级/子类型的问题。

  1. Butternife不支持向超级类型注入
  2. Dagger不支持注入子类型

正如已经指出的,解决2。您需要在MWActivity中调用inject,并且要使用Butternife,您需要在超级类中使用ViewHolder模式来绑定/注入字段,因为它将只注入MWActivity,而不是NavigationActivity

 类似资料:
  • 我刚开始使用Dagger并尝试使用dagger2进行DI,但看起来它给我的活动注入了一个空演示器。下面是我的代码。 公共类TasksActivity扩展AppCompatActivity{

  • 我创建了提供应用程序上下文的模块,我希望在模型层获得上下文。 我在Presenter层注入上下文,它使用,但是当我移到模型层时,Dagger在变量上注入一个值。 注入 主模块

  • 本文向大家介绍Dagger2 Android依赖注入学习笔记,包括了Dagger2 Android依赖注入学习笔记的使用技巧和注意事项,需要的朋友参考一下 前言 最近在用 MVP + RxJava + Retrofit 写项目,觉得相对于其他的开发框架,这的确是给我们带来了很多方便,但是在网上搜寻相关资料的时候,总是能看到 MVP + RxJava + Retrofit + Dagger 这样的搭

  • 这三个函数的返回类型提示有什么不同吗? 他们都应该有< code>- 提问的动机是这个问题,这个很好的答案,以及我正在学习类型提示的事实。

  • 我试图将一组房间组件注入存储库,存储库本身使用Dagger2注入ViewModel(在片段中)。 代码如下。 片段: 视图模型: 我的存储库: 最后,对于我的匕首类,我有两个模块: 和我的AppComponent: Dagger编译正常,我可以访问并构建它。但是是不可访问的(检查类将其显示为私有),我需要实际注入依赖项的方法也是如此。结果我得到错误: 我该如何解决这个问题?

  • 嗨,当我尝试在下面的类中注入Doa接口时,我正在使用mvvm和dagger2 我的接口类