2016-04-29 9 views
-1

ログインクラスとナビゲーション引き出しを使用してactivity_Mainを呼び出すと、メニューをナビゲートできません。 activity_mainでアプリケーションを起動すると、ナビゲーション・ドロワーが正しく機能します。ログイン+ナビゲーション引き出し

エラー: メソッド呼び出し「drawer.setDrawerListener(トグル)」「java.lang.NullPointerExceptionが」以下...(Ctrlキー+ F1) を生成することができる。この検査である可能条件を報告するための方法の制御およびデータ・フローを解析常に真または偽、値が静的に一定であることが証明された式、およびNULL可能性の契約違反につながる可能性のある状況。@ Nullableまたは@NotNullとしてマークされた変数、メソッドパラメータ、および戻り値は、nullable(またはそれぞれnullではない)として扱われ、解析中にnull許容契約をチェックするために使用されます。可能なNullPointerExceptionエラーを報告します。 @Contract( "、null - > null") - メソッドは、2番目の引数がnullの場合はnullを返します。@Contract( "、null - > null; _ @Contractアノテーションを使用して、より複雑なコントラクトを定義できます。 @Contract( "true - > fail") - trueが渡された場合に例外をスローする典型的なassertFalseメソッド (デフォルトでは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(); 
} 
+0

この質問はすべて明確ではありません。特定の質問を明確に記述し、問題を解決しようとしたコードを表示するように編集してください。 – NoChinDeluxe

+0

@ノーチンデラックスOKされました。 –

答えて

0

このログのみナビゲーション引き出し nullにすることができることを述べているが、実装して拡張します提供されたIDで見つからない場合はNull Pointer Exceptionが生成されます。

あなたは

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

それとも

assert drawer != null 
    drawer.setDrawerListener(toggle) 

を挿入した場合、ログのこの警告はdisapperますが、これにNullPointerチェックは実際には必要ありません。

ログの2番目の部分は、簡単に

drawer.addDrawerListener(toggle); 

を呼び出すしかし、これらすべてのものは必要ありません、あなたはそれを修正するには、非推奨メソッド

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

を使用していること、を示している!!すべてをそのままにしておくと、あなたのアプリケーションも実行されます。これらの変更はログの警告のみを削除します。

+0

ねえ、ありがとう、でも私は試してみましたが、うまくいきませんでした。問題は「トグル」だと思います。画面を呼び出すと、「ハンバーガー」メニューは表示されません。 (悪い英語) –

+0

ハンバーガーのアイコンが表示されないのですか? –

+0

しかし、logcat警告はもうありませんか? –

関連する問題