2017-07-29 78 views
-4

我有三项活动,Main,SecondActivity和ThirdActivity。我想从Main发送int变量到SecondActivity,之后,从Main(我得到)和SecondActivity发送int(number)到ThirdActivity。Android intent set getIntExtra as global variable

MainActivity:

String Score = 0; 

public void onNextClick(View view){ 
     Score++; 
     Intent intent = new Intent(this, SecondActivity.class); 
     intent.putExtra("Answer", Score); 
     startActivity(intent); 
     finish(); 
    } 

SecondActivity:

Intent intent = getIntent(); 
int Score2 = intent.getIntExtra("Answer", 0); 

public void onNextClick(View view){ 
     Score2++; 
     Intent intent = new Intent(this, ThirdActivity.class); 
     intent.putExtra("Answer2", Score2); 
     startActivity(intent); 
     finish(); 
    } 

,但我得到的错误:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.kvizzadatak/com.kvizzadatak.SecondActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2174) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5151) 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:868) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.kvizzadatak.ThirdActivity.(ThirdActivity.java:23) at java.lang.Class.newInstanceImpl(Native Method) at java.lang.Class.newInstance(Class.java:1208) at android.app.Instrumentation.newActivity(Instrumentation.java:1061) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2165) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2298)  at android.app.ActivityThread.access$800(ActivityThread.java:144)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:212)  at android.app.ActivityThread.main(ActivityThread.java:5151)  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:868)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)  at dalvik.system.NativeStart.main(Native Method)

+0

我需要设置变量Score2作为全球性的,但我不能.. – SteveYo

+0

在MainActivity已经采取了它作为'String'不'Int'检查 –

+0

@SunilP 是啊,那错误是固定的,但仍然是我的应用程序崩溃。 – SteveYo

回答

0

如果你想要把东西在一个地方,你可以很容易地在全球访问,您可以使用Shared Preference或Global常量类。如果你想使用意图转移那么你getIntent应该是Android的生命周期方法的一部分

SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE); 
int myIntValue = sp.getInt("Answer2", -1); 

- 使用共享县做以下

SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = sp.edit(); 
editor.putInt("Answer2", score2); 
editor.commit(); 

要访问它,你可以使用。所以你最好在你的onCreate方法中做下面的代码。

Intent intent = getIntent(); 
int Score2 = intent.getIntExtra("Answer", 0); 
+0

什么是'-1'? – SteveYo

+0

-1是默认值。如果在意图中没有值传递,那么默认情况下,myIntValue将被初始化为-1。您可以在此保留任何默认值。同样在下一行中,如果myIntValue == - 1然后执行默认操作,但是如果您获得某个值,则可以执行计算 –

+0

关于意图。如果我在onCreate中设置: Intent intent = getIntent(); int Score2 = intent.getIntExtra(“Answer”,0);然后,我无法在其他方法中访问Score2 var以便再次发送该var。 – SteveYo