2013-08-20 52 views
2

我试图将我主要活动的值传递给完成活动,但在完成活动时总是出错。我不知道我的代码有什么问题。无法在两个活动之间传递int值

下面是从我1级类我的代码:

注:的天文台在我的活动的顶部已经被定义,onCreate方法之前。

private void showElapsedTime() { 
    chrono.start(); 
    long timeElapsed = SystemClock.elapsedRealtime() - chrono.getBase();    
    int hours = (int) (timeElapsed/3600000); 
    int minutes = (int) (timeElapsed - hours * 3600000)/60000; 
    int seconds = (int) (timeElapsed - hours * 3600000 - minutes * 60000)/1000; 
    int seco = seconds; 

    Toast.makeText(this, "Elapsed milliseconds: " + seconds, 
      Toast.LENGTH_SHORT).show(); 

    Intent a = new Intent (this, Finish.class); 

    Bundle b = new Bundle(); 
    b.putInt("sec", seco); 
    a.putExtras(b); 
} 

,这一个是我的Finish.class代码:

Set1 = (TextView) findViewById (R.id.time1); 
Bundle b = getIntent().getExtras(); 

Set1.setText("time: " + b.getInt("seco")); 

logcat的:

08-20 11:37:49.345: E/AndroidRuntime(815): FATAL EXCEPTION: main 
08-20 11:37:49.345: E/AndroidRuntime(815): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mathattack/com.example.mathattack.Finish}: java.lang.NullPointerException 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.os.Looper.loop(Looper.java:123) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-20 11:37:49.345: E/AndroidRuntime(815): at java.lang.reflect.Method.invokeNative(Native Method) 
08-20 11:37:49.345: E/AndroidRuntime(815): at java.lang.reflect.Method.invoke(Method.java:521) 
08-20 11:37:49.345: E/AndroidRuntime(815): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-20 11:37:49.345: E/AndroidRuntime(815): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-20 11:37:49.345: E/AndroidRuntime(815): at dalvik.system.NativeStart.main(Native Method) 
08-20 11:37:49.345: E/AndroidRuntime(815): Caused by: java.lang.NullPointerException 
08-20 11:37:49.345: E/AndroidRuntime(815): at com.example.mathattack.Finish.onCreate(Finish.java:33) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-20 11:37:49.345: E/AndroidRuntime(815): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-20 11:37:49.345: E/AndroidRuntime(815): ... 11 more 
+0

什么是在完成CALSS线33。 – Aravin

+2

你把秒,但你尝试访问seco。 –

+0

@JoshM我刚试过。通过访问秒,我得到了同样的错误。 – pingboo23

回答

1

int存储在名为 “秒”。尝试使用下面的行来检索它。

Set1.setText("time: " + String.valueOf(b.getInt("sec")));

+0

如果这是不正确的解释为什么,而不是只是一个投票,将不胜感激。 – Jon

+0

它只会让我逼近。同样的错误。 – pingboo23

+0

我没有给你一个投票。我不知道是谁点了它。 – pingboo23

1

它是一个好主意,以检查是否额外为null,实际上提取之前:

if (b!= null) { 
    int val = b.getInt("sec"); 
    Set1.setText("time: " + String.valueOf(val)); 
} 
+0

我试过这个,没有错误,但它仍然没有在我的textView的finish.class中设置秒的值。 – pingboo23

+0

它不会设置它。它只会在你用这个特定的意图调用'startActivity'时设置。由于您没有以该意图开始“完成活动”,因此不会设置它。如果你想在两个类之间分享一些价值,你可以使用'SharedPreference'。 –

+0

我上次尝试了SharedPreference,但它不起作用。那么,我应该在哪里放置startActivity? – pingboo23

0

你也可以尝试使用一个对象,你可以把你想要在其他使用变量在创建方法之前的活动,以便我可以被其他类使用。

public class ... extends Activity { 

    int p; // int which you want to share. 

@Override 

protected void onCreate(Bundle savedInstanceState){ 
     ........ 
     } 
} 

和隔壁班的,你可以这样做:

MainActivity mn = new MainActivity(); 

System.out.println(mn.p); 
+0

我不能通过这个访问'seconds'。 – pingboo23

+0

你可以在创建之前创建另一个变量,并在主要活动中将其赋值为int m = secconds – Prakhar

+0

?这是错误的。 – pingboo23