2012-07-30 42 views
0

我是相當新的Android編程,並一直在尋找一些指針來解決這個問題,但我似乎無法得到確切的問題。在onCreate,NullPointerException似乎無法找到調試後的原因

我想我只是需要一些指針爲什麼會拋出一個NullPointerException,以便我可以在將來自己追蹤它。

相關的代碼的一些片段:

private static final long TWO_MINUTES = 1000 * 60 * 2; 
    private static final long TEN_SECONDS = 10000; 
    private static final float TEN_METERS = 10; 
    public static final String LOG_TAG = "Locally"; 
    private static LocationManager locMan; 
    Button StopButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Toast.makeText(getApplicationContext(), "Attempting to start service", 
       Toast.LENGTH_SHORT); 

     startService(new Intent(LocallyActivity.this, LocallyService.class)); 

     StopButton = (Button) findViewById(R.id.button1); 

     LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     double lat = 0; 
     double longi = 0; 
     TextView t = (TextView) findViewById(R.id.textView1); 
     Criteria crit = new Criteria(); 
     String strLoc = locMan.getBestProvider(crit, true); 
     Location lastKnown = locMan.getLastKnownLocation(strLoc); 
     if (lastKnown != null) { 
      lat = lastKnown.getLatitude(); 
      longi = lastKnown.getLongitude(); 
      long tsLong = System.currentTimeMillis()/1000; 
      long lastTime = lastKnown.getTime(); 
      long difference = tsLong - lastTime; 

      Time time = new Time(); 
      time.set(Long.valueOf(lastTime)); 
      t.setText("" + lat + ", " + longi + " (" + strLoc + ", time: " 
        + time.hour + " " + time.minute + ")"); 

      Object networkLocation = requestUpdatesFromProvider(strLoc, 32); 
     } else { 
      t.setText("No last location from " + strLoc); 
     } 
    } 

    private Location requestUpdatesFromProvider(final String provider, 
      final int errorResId) { 
     Location location = null; 
     Log.v(LOG_TAG, provider); 
     if (locMan.isProviderEnabled(provider)) { 
      locMan.requestLocationUpdates(provider, TEN_SECONDS, TEN_METERS, 
        listener); 
      location = locMan.getLastKnownLocation(provider); 
     } else { 
      Toast.makeText(this, errorResId, Toast.LENGTH_LONG).show(); 
     } 
     return location; 

    } 

和錯誤跟蹤:67

07-30 12:41:12.644: E/AndroidRuntime(20697): FATAL EXCEPTION: main 
07-30 12:41:12.644: E/AndroidRuntime(20697): java.lang.RuntimeException: Unable to start   activity ComponentInfo{com.somnu.locally/com.somnu.locally.LocallyActivity}:  java.lang.NullPointerException 
07-30 12:41:12.644: E/AndroidRuntime(20697): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.os.Looper.loop(Looper.java:137) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.ActivityThread.main(ActivityThread.java:4424) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at java.lang.reflect.Method.invoke(Method.java:511) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at dalvik.system.NativeStart.main(Native Method) 
07-30 12:41:12.644: E/AndroidRuntime(20697): Caused by: java.lang.NullPointerException 
07-30 12:41:12.644: E/AndroidRuntime(20697): at com.somnu.locally.LocallyActivity.requestUpdatesFromProvider(LocallyActivity.java:67) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at com.somnu.locally.LocallyActivity.onCreate(LocallyActivity.java:57) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.Activity.performCreate(Activity.java:4465) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
07-30 12:41:12.644: E/AndroidRuntime(20697): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
07-30 12:41:12.644: E/AndroidRuntime(20697): ... 11 more 

線路是:

if (locMan.isProviderEnabled(provider)) { 
+3

和線是(LocallyActivity.java:67)? – Nermeen 2012-07-30 10:53:24

+1

您是否在AndroidManifest.xml中添加了LocallyActivity? – Lucifer 2012-07-30 10:53:33

+0

行號是例外是在com.somnu.locally.LocallyActivity.requestUpdatesFromProvider(LocallyActivity.java:67),你可以突出顯示並在代碼中張貼該行 – 2012-07-30 10:55:23

回答

5

我覺得locMan is null so NPE...

使用

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

代替

LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
+0

我會編輯這個,看看它是否有任何效果,但我已經嘗試從locMan輸出一些字符串,他們工作得很好。所以我猜這不是問題。 – 2012-07-30 11:43:07

+0

它實際上解決了我的問題。但我不知道爲什麼它不像我以前寫的那樣工作... – 2012-07-30 12:55:49