2013-08-20 56 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