java - `onCreate` 方法未被调用

标签 java android dagger-2

我正在使用Dagger2.22注入(inject)MainActivity,它扩展了BaseActivityBaseActivity扩展了>DaggerAppCompatActivity。似乎两个 Activity 的 onCreate() 方法都没有被调用,因为我在 BaseActivityonCreate() 内部调用了一个函数,并且这不起作用,当我将 log 语句放入其中时,它们也没有被打印,并且当我将调试器放在 onStart()两个 Activity 的 >onCreate() 然后结果是调用 MainActivityonStart() 方法,而不是 onCreate() 方法em> 后跟 BaseActivityonStart() 被调用。虽然 MainActivity 正在显示,并且如果它被创建,那么 onCreate() 方法将被调用,但 onCreate() 方法内没有代码似乎不起作用,他们也没有在调试中被调用。我不明白到底发生了什么?

基本 Activity

public abstract class BaseActivity extends DaggerAppCompatActivity {
    private static final String TAG = BaseActivity.class.getSimpleName();

    @Inject
    public SessionManager sessionManager;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);

        Log.d(TAG, "onCreate: ");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");


    }

    private void subscribeObservers(){
        Log.d(TAG, "subscribeObservers: ");
        sessionManager.getAuthUser().observe(this, new Observer<AuthResource<User>>() {
            @Override
            public void onChanged(AuthResource<User> userAuthResource) {
                Log.d(TAG, "onChanged: auth resource ==> " + userAuthResource + "auth status ==> " + userAuthResource.status);
                if (userAuthResource != null) {
                    Log.d(TAG, "onChanged: auth status ==> " + userAuthResource.status);

                    switch (userAuthResource.status) {
                        case LOADING: {
                            break;
                        }
                        case AUTHENTICATED: {
                            Log.d(TAG, "onChanged: LOGIN SUCCESS: " + userAuthResource.data.getEmail());
                            break;
                        }
                        case ERROR: {
                            Toast.makeText(BaseActivity.this, userAuthResource.message +
                                            "\nDid you enter number between 1 and 10",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        }
                        case NOT_AUTHENTICATED: {
                            navLoginScreen();
                            break;
                        }
                    }
                }
            }
        });
    }

    private void navLoginScreen(){
        Intent intent = new Intent(this, AuthActivity.class);
        startActivity(intent);
        finish();
    }
}

主要 Activity

public class MainActivity extends BaseActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.activity_main);

        Log.d(TAG, "onCreate: ");

    }

    @Override
    protected void onStart() {
        super.onStart();

        Log.d(TAG, "onStart: ");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case R.id.logout: {
                sessionManager.logout();
                return true;
            }
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

这是我在组件中注入(inject)的模块
ActivityBuilders模块


@Module
public abstract class ActivityBuildersModule {
    @ContributesAndroidInjector(modules = {
            AuthViewModelsModule.class,
            AuthModule.class
    })
    abstract AuthActivity contributeAuthActivity();

    @ContributesAndroidInjector
    abstract MainActivity contributeMainActivity();

}

最佳答案

要覆盖的onCreate()的签名是这样的:

protected void onCreate(@Nullable Bundle savedInstanceState)

而不是您在代码中覆盖的内容。

关于java - `onCreate` 方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595752/

相关文章:

java - 安卓测试: Checking the LeftDrawable image is correct

java - 不深度复制的简单 Java 对象

java - 分而治之最大连续子数组 (MCS) 问题

android - 请求休息服务器的 Kotlin 扩展功能

将 dagger 2.18 与 kotlin kapt 结合使用时,Android 构建失败

java - 选择一个好的网络开发框架

android - 向离线设备发送 GCM 通知

android - 改造 2 队列等待大小

java - 我如何循环 JSON 对象的响应?

android - 组件(无作用域)可能不引用作用域绑定(bind)