2015-04-12 82 views
0

我有一個類QuestionSearchGPSSensorActivity擴展。我想從另一個班級QuizMap撥打QuestionSearch.testLocation()。在調用中,我得到一個nullPointerException致命異常,我無法解決原因。它與QuestionSearch.testLocation()調用相關:LogCat將其列爲錯誤,並且在調用QuestionSearch.testLocation()時應用程序功能被註釋掉。Android java:從另一個類的調用方法導致致命異常

我認爲它也與從onPostExecute發出的呼叫有關,並且有一個SO帖子here,它暗示了正確的方法,但是我無法完全理解它(對於Java還是新手)。

下面的代碼片段,認爲我已經包含足夠的。

// GPSSensorActivity class 
public class GPSSensorActivity extends Activity { 

    private static final String TAG = "GPSSensorActivity"; // debugging tag 

    private static final long MINIMUM_DISTANCECHANGE_FOR_UPDATE = 1; // in Meters 
    private static final long MINIMUM_TIME_BETWEEN_UPDATE = 5000; // in Milliseconds  

    // these strings are used when saving the users' preferred location 
    private static final String POINT_LATITUDE_KEY = "POINT_LATITUDE_KEY"; 
    private static final String POINT_LONGITUDE_KEY = "POINT_LONGITUDE_KEY"; 


    private LocationManager locationManager; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     locationUpdater(); 

    } 

     public void locationUpdater() { 
     // set up a new location manager 
     // this controls the location services on the phone 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // set up a listener from AppLocationListener class to listen for changes in location 
     AppLocationListener androidLL = new AppLocationListener(); 
     androidLL.parentActivity = this; 

     // get location updates 
     locationManager.requestLocationUpdates(
         LocationManager.GPS_PROVIDER, 
         MINIMUM_TIME_BETWEEN_UPDATE, 
         MINIMUM_DISTANCECHANGE_FOR_UPDATE, 
         androidLL); 

     } 

     // QuestionSearch class 
public class QuestionSearch extends GPSSensorActivity { 

    private static final String TAG = "QuestionSearch"; // debugging tag 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quizmap); 

    locationUpdater(); 


    } 

    public void testLocation() { 

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

     Log.i(TAG, "latitude is " + location.getLatitude()); 
    } 


    // QuizMap class that tries to call QuestionSearch 
public class QuizMap extends FragmentActivity 
implements OnMarkerClickListener { 
    private GoogleMap map; 

    private static final String TAG = "QuizMap"; // debugging 

    .... 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    @Override 
    protected void onPostExecute(String result) { 

      // create the various points on the map 
      ParseKMLAndMap dm = new ParseKMLAndMap(); 
      dm.mapView = map; 
      dm.resultString = result; 
      //Log.i(TAG,"DownloadWebPageTask result" + result); //debugging 
      dm.startParsing(); 
      startQuestionSearch(result); 

     } 


} 


    public void startQuestionSearch(String result) { 
    QuestionSearch questionSearch = new QuestionSearch(); 
    questionSearch.testLocation(); 

堆棧跟蹤這裏:

04-12 12:51:15.511: E/AndroidRuntime(31797): FATAL EXCEPTION: main 
04-12 12:51:15.511: E/AndroidRuntime(31797): java.lang.NullPointerException 
04-12 12:51:15.511: E/AndroidRuntime(31797): at uk.ac.ucl.cege.cegeg077.ucesrud.GeoQuiz.QuestionSearch.testLocation(QuestionSearch.java:42) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at uk.ac.ucl.cege.cegeg077.ucesrud.GeoQuiz.QuizMap.startQuestionSearch(QuizMap.java:198) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at uk.ac.ucl.cege.cegeg077.ucesrud.GeoQuiz.QuizMap$DownloadWebPageTask.onPostExecute(QuizMap.java:167) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at uk.ac.ucl.cege.cegeg077.ucesrud.GeoQuiz.QuizMap$DownloadWebPageTask.onPostExecute(QuizMap.java:1) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.os.AsyncTask.finish(AsyncTask.java:417) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.os.Looper.loop(Looper.java:130) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at java.lang.reflect.Method.invokeNative(Native Method) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at java.lang.reflect.Method.invoke(Method.java:507) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
04-12 12:51:15.511: E/AndroidRuntime(31797): at dalvik.system.NativeStart.main(Native Method) 
+1

發佈您的堆棧跟蹤。 –

+0

爲什麼我被貶爲這個? – mark

+0

因爲原始帖子不夠清楚,不足以解決問題發生的位置。我投了一票。 –

回答

0

位置管理器仍在運行,並給予更新。我注意到我叫locationUpdated兩次,一次在QuestionSearch,一次在GPSSensorActivity。沒有必要這樣做,所以我省去locationUpdater'.QuetionSearch實例nullPointerException`現在已經消失,將被另一個異常所取代。我會爲此提出一個不同的SO問題。

相關問題