登录+导航抽屉

时间:2016-04-29 22:01:27

标签: java android login

当我登录类并使用导航抽屉调用activity_Main时无法导航菜单。当我通过activity_main启动应用程序导航抽屉正常工作。

错误: 方法调用' drawer.setDrawerListener(toggle)'可能会产生' java.lang.NullPointerException'少...(Ctrl + F1) 此检查分析方法控制和数据流,以报告始终为真或假的可能条件,静态证明其值为常量的表达式,以及可能导致可违反合同违约的情况。 标记为@Nullable或@NotNull的变量,方法参数和返回值被视为可空(或分别为非空),并在分析期间用于检查可空性合同,例如,报告可能的NullPointerException错误。 可以使用@Contract注释定义更复杂的合同,例如: @Contract(" ,null - > null") - 如果第二个参数为null,则方法返回null @Contract(" ,null - > null; _, !null - >!null") - 如果第二个参数为null且null不为null,则返回null;否则返回@Contract(" true - > fail") - 抛出一个典型的assertFalse方法异常,如果传递给它则为true 可以将检查配置为使用自定义@Nullable @NotNull注释(默认情况下将使用annotations.jar中的注释)' setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener)'不推荐使用...(Ctrl + F1) 此检查报告在指定的检查范围内使用弃用代码的位置。

登录

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    // Set up the login form.
    mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
    populateAutoComplete();

    mPasswordView = (EditText) findViewById(R.id.password);
    mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.id.login || id == EditorInfo.IME_NULL) {
                attemptLogin();
                return true;
            }
            return false;
        }
    });

    Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
    mEmailSignInButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            attemptLogin();
        }
    });

    mLoginFormView = findViewById(R.id.login_form);
    mProgressView = findViewById(R.id.login_progress);

    Button email_sign_in_button = (Button) findViewById(R.id.email_sign_in_button);
    email_sign_in_button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            setContentView(R.layout.activity_main);

        }

    });
}

主要活动

公共类MainActivity扩展了AppCompatActivity         实现NavigationView.OnNavigationItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    FragmentManager fm = getFragmentManager();
    fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit();
}

1 个答案:

答案 0 :(得分:0)

此日志仅表示导航抽屉 COULD 为空,如果提供的ID未找到它,则会产生空指针异常。

如果您插入

if(drawer != null){
     drawer.setDrawerListener(toggle)
}

  assert drawer != null
  drawer.setDrawerListener(toggle)

日志中的此警告将消失,但实际上不需要此NullPointer检查。

日志的第二部分表示您使用弃用的方法

android.support.v4.widget.DrawerLayout.setDrawerListener(android.support.v4.widget.DrawerLayout.DrawerListener);

要解决此问题,请轻松调用

drawer.addDrawerListener(toggle);

但所有这些都不是必需的!!如果您保持一切不变,您的应用也会运行,这些更改只会删除日志警告!

相关问题