2015-04-12 6 views
0

У меня есть класс QuestionSearch, расширенный от GPSSensorActivity. Я хочу позвонить QuestionSearch.testLocation() из другого класса QuizMap. В вызове я получаю фатальное исключение 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. Нет необходимости делать это, поэтому я отказался от экземпляра QuetionSearchlocationUpdater'. nullPointerException`, который должен быть заменен другим исключением. Для этого я подниму другой вопрос.

 Смежные вопросы

  • Нет связанных вопросов^_^