2016-04-29 234 views
-1

當我登錄課堂並使用導航抽屜調用activity_Main時,無法導航菜單。當我通過activity_main啓動應用程序時,導航抽屜可正常工作。登錄+導航抽屜

錯誤: 方法調用「drawer.setDrawerListener(切換)」可以產生「顯示java.lang.NullPointerException」更少...(按Ctrl + F1) 該檢查分析方法控制和數據流以報告是可能的條件永遠是真的或假的,其價值被靜態證明是不變的表達以及可能導致違反合同的情況。 標記爲@Nullable或@NotNull的變量,方法參數和返回值被視爲可爲空(或分別爲非空),並在分析過程中用於檢查可空性合約。報告可能的NullPointerException錯誤。 可以使用@Contract註釋來定義更復雜的合同,例如: @Contract(「,null - > null」) - 如果方法的第二個參數爲null,則返回null @Contract(「,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(); 
} 
+0

這個問題根本不清楚。請考慮編輯它以清楚地陳述特定問題並顯示您嘗試解決問題的代碼。 – NoChinDeluxe

+0

@NoChinDeluxe好了,完成了。 –

回答

0

此日誌只說,抽屜式導航COULD爲空,如果它沒有被提供的id找到,那麼它會產生一個空指針異常。

如果插入

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

或者

assert drawer != null 
    drawer.setDrawerListener(toggle) 

此警告在日誌中會即消失,但這種空指針檢查是沒有必要的事實。

日誌的第二部分指出,您使用的方法已過時

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

爲了解決這個問題,方便地調用

drawer.addDrawerListener(toggle); 

但所有這些東西都不是必需的!如果您保留所有內容,您的應用程序也將運行,這些更改只會刪除日誌警告!

+0

嘿謝謝,但我嘗試,但它沒有奏效,我認爲問題是「切換」。當我調用屏幕時,它不帶有「漢堡包」菜單。 (英語不好) –

+0

那麼漢堡包圖標不顯示? –

+0

但logcat警告不存在了,不是嗎? –