2016-04-27 7 views
0

Я хотел бы изменить название пункта в меню, но я получаю сообщение об ошибке, вот лог:Пункт меню SETTITLE

E: FATAL EXCEPTION: main 
Process: com.locateit.antholife.locateit, PID: 18329 
java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setTitle(java.lang.CharSequence)' on a null object reference 
    at com.locateit.antholife.locateit.Main2Activity.onPrepareOptionsMenu(Main2Activity.java:786) 
    at android.app.Activity.onPreparePanel(Activity.java:3150) 
    at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:530) 
    at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:519) 
    at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93) 
    at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:297) 
    at android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93) 
    at android.support.v7.app.ToolbarActionBar$ToolbarCallbackWrapper.onPreparePanel(ToolbarActionBar.java:567) 
    at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:455) 
    at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:158) 
    at android.app.ActivityThread.main(ActivityThread.java:7229) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:133) 

Я не понимаю, почему это делает на нулевую ссылку на объект ..

Вот ява файл:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.vue, menu); 
    this.menu = menu; 
    return true; 

тогда;

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    super.onPrepareOptionsMenu(menu); 
    MenuItem titredistance = menu.findItem(R.id.nav_distance); 

    SharedPreferences sharedPreferences = this.getSharedPreferences(
          "appSharedPreferences", Context.MODE_PRIVATE); 
    String lat1 = sharedPreferences.getString("lat", null); 
    String lng1 = sharedPreferences.getString("lng", null); 

    if (ContextCompat.checkSelfPermission(Main2Activity.this, 
      Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) { 

     LocationManager locationManager = (LocationManager) 
           getSystemService(Context.LOCATION_SERVICE); 

     Criteria criteria = new Criteria(); 

     Location location = locationManager.getLastKnownLocation(
           locationManager.getBestProvider(criteria, false)); 

     if (lat1 != null) { 
      if (lng1 != null) { 
       if (location != null) { 

        if (ContextCompat.checkSelfPermission(this, 
          Manifest.permission.ACCESS_FINE_LOCATION) 
          == PackageManager.PERMISSION_GRANTED) { 

         double latl = location.getLatitude(); 
         double lngl = location.getLongitude(); 

         double lat = Double.parseDouble(lat1); 
         double lng = Double.parseDouble(lng1); 

         Location locationA = new Location("point A"); 

         locationA.setLatitude(lat); 
         locationA.setLongitude(lng); 

         Location locationB = new Location("point B"); 

         locationB.setLatitude(latl); 
         locationB.setLongitude(lngl); 

         float distance = locationA.distanceTo(locationB); 
         dfi = Float.toString(distance); 
         titredistance.setTitle 
          ("Distance entre la dernière position de Locate iT et la votre :" 
                    + "\n" + dfi + "mètres"); 
        } 
       } 
      } 
     } else { 
      titredistance.setTitle("Aucune position de Locate iT enregistrée."); 
     } 
    } 
    return(true); 
} 

Спасибо за помощь! :)

XML файл:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<group android:checkableBehavior="single"> 
    <item android:title="Tâches"> 
     <menu> 
      <item 
       android:id="@+id/nav_buzz" 
       android:icon="@drawable/buzz" 
       android:title="Faire Vibrer/Sonner Locate iT." /> 
      <item 
       android:id="@+id/nav_distance" 
       android:icon="@drawable/distance" 
       android:title="En cours.." /> 
      <item 
       android:id="@+id/nav_manage" 
       android:icon="@drawable/ic_menu_manage" 
       android:title="Paramètres." /> 

     </menu> 
    </item> 
</group> 
+0

'titredInstance' вероятно нуль, потому что' R.id.nav_distance' в 'menu.findItem()' вызов может быть неправильным –

+0

Почему это? Да, я видел тему, но, к сожалению, ничего не работает! .. –

+0

Почему это неправильно? .. –

ответ

0

Это был вид навигации, так что проблема решена спасибо! Мы должны определить, что мы говорили меню ..! :

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
Menu nv = navigationView.getMenu(); 
MenuItem item = nv.findItem(R.id.nav_distance); 
+0

как закрыть тему? –