2012-11-26 37 views
0

昨天!我寫了代碼找到位置!是工作。但是今天,當我在diffirent函數中編寫更多代碼時,它不起作用。並拋出異常 你能幫我嗎? HIX!我是新手。 這裏是日誌:我的位置拋出空指針異常?

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 

,這是我的功能找到的位置:

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; 
} 

,這是功能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

什麼是MainActivity.java的第351行? – Eric

回答

0

最有可能

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

返回null,並且您不經檢查就使用它。

+0

如何查詢!我認爲GPS總是給一個位置? –

+1

'if(location!= null){'在這裏做某處位置},否則只是忽略或顯示一個錯誤。 GPS可能沒有位置,如果它很久以前使用或還沒有衛星定位。 – lenik

0

getLastKnownLocation(provider)上的Google文檔聲明「如果提供程序當前被禁用,則返回null。」確保您的GPS隨時使用上面的代碼測試您的例程,因爲您有

locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); 
+0

它始終啓用! HIX –