我有一个活动,LookForGPS,它启动另一个活动,运行。启动Run后,LookingForGPS无法完成,而是在运行中不断更新一些TextView:
Run run = new Run();
if(runHasBeenStarted)run.getAndSetValues(someParameters, this);
据我了解,this
会返回LookingForGPS活动。但是,过了一会儿(当参数是某个值时)我想开始一个新的活动,PostRun。从Run实例的getAndSetValues:
private void killEverythingAndProceed(Context context){
Intent finishRun = new Intent(context, PostRun.class);
//putting some extras into the intent
startActivity(finishRun);
}
然后我在startActivity的行中得到一个NullPointerException:
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)
我在做什么可怕的错?我想我缺乏对面向对象编程的了解导致了这一点。它不是引起它的额外内容,并且上下文也应该是正确的,因为它适用于来自同一实例的另一个方法。
编辑:详细解释
LookingForGPS活动有一个LocationManager(不使用服务,因为它有一些限制,对我来说太复杂了)。每次调用onLocationChanged
时,Run
活动都会被实例化(我检查它是否实际上已经首先启动,它是由用户独立启动的)还是getAndSetValues
方法调用inside Run
,给出一堆参数。 getAndSetValues
然后执行一些计算并更新TextViews
活动中的一些Run
(一切正常)。还执行计算以查看是否已满足某个条件。如果是的话,postRun
活动应该被启动,这是我遇到上述例外的时候。
答案 0 :(得分:1)
问题在于:
Run run = new Run();
看起来Run
是Activity
。永远不要使用new
实例化活动 - 您不能将实例化的活动用于您想要使用活动的任何内容。例如,要用作Context
的{{1}}。
使用系统为您设置的startActivity()
实例,或使用Activity
启动新的活动实例。