2012-11-26 4 views
0

Hier! J'ai écrit du code pour trouver l'emplacement! c'est du travail. mais aujourd'hui, quand je code plus à la fonction diffirent, ça ne marche pas. et jeter une exception Pouvez-vous m'aider? hix! Je suis un novice. ici est le journal:Mon emplacement est-il vide?

11-26 09:44:52.109: E/AndroidRuntime(9259): FATAL EXCEPTION: main 
11-26 09:44:52.109: E/AndroidRuntime(9259): java.lang.NullPointerException 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.example.zzzzzz.MainActivity.onOptionsItemSelected(MainActivity.java:351) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.app.Activity.onMenuItemSelected(Activity.java:2205) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:777) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.view.View$PerformClick.run(View.java:9112) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.os.Handler.handleCallback(Handler.java:587) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.os.Handler.dispatchMessage(Handler.java:92) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.os.Looper.loop(Looper.java:130) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at android.app.ActivityThread.main(ActivityThread.java:3835) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
11-26 09:44:52.109: E/AndroidRuntime(9259):  at dalvik.system.NativeStart.main(Native Method) 
11-26 09:44:53.939: I/Process(9259): Sending signal. PID: 9259 SIG: 9 

et ceci est ma fonction pour trouver l'emplacement:

public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
    case R.id.about: 
     //about 
     Intent about = new Intent("com.example.zzzzzz.About"); 
     startActivity(about); 
     break; 
    case R.id.setting: 
     //setting 
     Intent setting = new Intent("com.example.zzzzzz.Setting"); 
     startActivityForResult(setting, 2); 
     break; 
    case R.id.direction: 
     //direction 
     Intent direction = new Intent("com.example.zzzzzz.Direction"); 
     startActivityForResult(direction, 1); 
     break; 
    case R.id.MyLocation: 
     //mylocation 
     //Intent mylocation = new Intent("com.example.zzzzzz.MyLocation"); 
     //startActivity(mylocation); 
     initLocationManagerV2(); 
     LocationManager locationManager; 
     locationManager = (LocationManager)getSystemService (Context.LOCATION_SERVICE); 
     Location location = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); 
     double lat = location.getLatitude(); 
     double lng = location.getLongitude(); 
     GeoPoint find = new GeoPoint((int)(lat*1E6), (int)(lng*1E6)); 
     mv.getController().animateTo(find); 
     mv.invalidate(); 
     break; 
    } 

    return false; 
} 

et c'est la fonction initLocationMaganeV2:

private void initLocationManagerV2() { 
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    locListener = new LocationListener() { 

     public void onLocationChanged(Location newLocation) { 
      createAndShowCustomOverlay(newLocation); 
     } 

     public void onProviderDisabled(String arg0) { 
     } 

     public void onProviderEnabled(String arg0) { 
     } 

     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
     } 
    }; 
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
      locListener); 
} 

protected void createAndShowCustomOverlay(Location newLocation) { 
    List overlays = mv.getOverlays(); 

    // first remove old overlay 
    if (overlays.size() > 0) { 
     for (Iterator iterator = overlays.iterator(); iterator 
       .hasNext();) { 
      iterator.next(); 
      iterator.remove(); 
     } 
    } 

    // transform the location to a geopoint 
    GeoPoint geopoint = new GeoPoint(
      (int) (newLocation.getLatitude() * 1E6), (int) (newLocation 
        .getLongitude() * 1E6)); 

    // Create new Overlay 
    CustomOverlay overlay = new CustomOverlay(geopoint); 

    mv.getOverlays().add(overlay); 

    // move to location 
    //mv.getController().animateTo(geopoint); 

    // redraw map 
    mv.postInvalidate(); 
} 
+0

Qu'est-ce que la ligne 351 de MainActivity.java? – Eric

Répondre

0

très probablement

Location location = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); 

renvoie null, et vous l'utilisez sans vérifier.

+0

comment vérifier! Je pense que le GPS donne toujours un emplacement ??? –

+1

'if (location! = Null) {' faire quelque chose avec l'emplacement ici '}', sinon, ignorez ou affichez une erreur. Le GPS n'a peut-être pas d'emplacement s'il a été utilisé il y a longtemps ou s'il n'a pas encore de position satellite. – lenik

0

La documentation de Google sur getLastKnownLocation (fournisseur) indique que "Si le fournisseur est actuellement désactivé, null est renvoyé". Assurez-vous que votre GPS est activé chaque fois que vous testez votre routine avec le code ci-dessus, comme vous l'avez

locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); 
+0

c'est toujours activé! Hix –

Questions connexes