2014-11-17 3 views
0

У меня есть активность, LookingForGPS, которая запускает другое действие, Run. После запуска Run, LookingForGPS не заканчивается, а постоянно обновляет некоторые TextViews в Run:Запуск активности Android дает NullPointerException

Run run = new Run(); 
if(runHasBeenStarted)run.getAndSetValues(someParameters, this); 

В моем понимании, this возвращает активность LookingForGPS. Однако через некоторое время (когда параметры являются определенным значением) я хочу начать новую активность, PostRun. Следующий метод вызывается из getAndSetValues ​​экземпляра выполнения в:

private void killEverythingAndProceed(Context context){ 
    Intent finishRun = new Intent(context, PostRun.class); 
    //putting some extras into the intent 
    startActivity(finishRun); 
} 

Затем я получаю NullPointerException на линии startActivity:

11-17 08:34:33.647 2472-2472/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: lv.rv1g.kj0112.forward, PID: 2472 
java.lang.NullPointerException 
     at android.app.Activity.startActivityForResult(Activity.java:3424) 
     at android.app.Activity.startActivityForResult(Activity.java:3385) 
     at android.app.Activity.startActivity(Activity.java:3627) 
     at android.app.Activity.startActivity(Activity.java:3595) 
     at lv.rv1g.kj0112.forward.Run.killEverythingAndProceed(Run.java:143) 
     at lv.rv1g.kj0112.forward.Run.getAndSetValues(Run.java:88) 
     at lv.rv1g.kj0112.forward.LookingForGPS.onLocationChanged(LookingForGPS.java:100) 
     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:279) 
     at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:208) 
     at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:224) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 

Что я делаю не так ужасно? Я думаю, что это недостаток знаний об объектно-ориентированном программировании, вызывающий это. Это не дополнительные действия, вызывающие его, и контекст должен быть правильным, так как он работает для другого метода из того же экземпляра.

Edit: подробное объяснение

LookingForGPS активность имеет LocationManager (не используя услугу, поскольку он имеет некоторые ограничения, которые слишком сложны для меня работать вокруг). Каждый раз, когда вызывается onLocationChanged, создается событие Run (я проверяю, действительно ли он был запущен первым, он запускается пользователем независимо от LocationManager), и вызывается метод getAndSetValues внутри Run, дающий кучу параметров. getAndSetValues затем выполняет некоторые вычисления и обновляет некоторые TextViews в действии Run (все работает отлично). Также выполняется расчет, чтобы убедиться, что выполнено определенное условие. Если бы это было так, то должно было начаться действие postRun, то есть когда я столкнулся с указанным выше исключением.

+0

Можете ли вы опубликовать весь свой код, потому что слишком сложно найти проблему, с которой вы сталкиваетесь. – hardartcore

+0

@ Android-разработчик действительно очень много расчетов, важная часть, которую я описал в своем редактировании. Я могу опубликовать код, если вы думаете, что это поможет, но я не думаю, что это будет. – Karl

ответ

1

Вот проблема:

Run run = new Run(); 

Похоже Run является Activity. Никогда не создавайте операции с помощью new - вы не можете использовать действия, созданные таким образом для всего, для чего вы хотите использовать активность. Например, для использования в качестве Context для startActivity().

Либо используйте экземпляр Activity, который был настроен системой для вас, либо используйте Intent для запуска нового экземпляра операции.

+0

Если вы посмотрите на stacktrace, то NullPointer будет сброшен в 'killEverythingAndProceed', поэтому я думаю, что больше похоже на переменную context. – hardartcore

+0

Это действительно работа. Как использовать экземпляр 'Activity'? – Karl

+0

@ Android-разработчик Это было бы раньше в конструкторе 'Intent', если' context' был null. – laalto

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