2013-05-09 50 views
0

日誌說,活動不能暫停,數字格式異常,我試圖保存兩個編輯文本的狀態保存數字,但都可以是空的或一個可以是空的保存狀態導致應用程序崩潰

在我的活動中有兩個編輯文本,用戶可以手動輸入數字並移動到下一步或打開計算器來合計一些數字,並將總數設置爲其中一個編輯文本,我想要保存狀態所以如果他需要使用計算器填寫兩個編輯文本,那麼當他們返回第二個數字時,他設置的第一個數字將仍然存在。

我不知道處理這個,這裏是我試過的代碼的最後一點。

protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    double length =Double.parseDouble(edtNumber1.getText().toString()); 
    double height = Double.parseDouble(edtNumber2.getText().toString()); 

    outState.putDouble("LENGTH", length); 
    outState.putDouble("HEIGHT", height); 
} 

而在的onCreate

if (savedInstanceState != null) { 
    double hght = savedInstanceState.getDouble("LENGTH"); 
    double lnth = savedInstanceState.getDouble("LENGTH"); 
    if (savedInstanceState.containsKey("LENGTH")); { 
     edtNumber1.setText(Double.toString(lnth)); 
    } 

    if(savedInstanceState.containsKey("HEIGHT")); { 
     edtNumber2.setText(Double.toString(hght)); 
    } 
} 

回答

1

嘗試調用super.onSaveInstanceState(outState);在方法的結尾,並確保您的EDITTEXT包含數字。

因此,改變

double hght = savedInstanceState.getDouble("LENGTH");

通過

double hght = savedInstanceState.getDouble("HEIGHT");

,並刪除您;if (savedInstanceState.containsKey("LENGTH"));if (savedInstanceState.containsKey("HEIGHT"));

+0

好的,謝謝,但看到我的編輯文本都可以是空的第一次打開計算器 – Robert 2013-05-09 19:42:20

1

這意味着,一個(或兩個)的文本字段沒有號碼。您需要捕獲ParseDouble周圍的異常並以某種方式處理它(可能通過使用默認值)。

+0

謝謝,當我給它一個默認爲零它停止它崩潰,但它仍然不保存狀態,當我離開和返回,更多建議 – Robert 2013-05-09 20:13:32

1

您的「if」語句後面有多餘的分號,將它們變爲空操作並導致隨後的塊始終被執行。

+0

另外,Gabe Sechan是對的;即使找到這些值,它們也可能會變形,從而導致異常。 – 2013-05-09 19:29:00

+0

嗨,謝謝你指出 – Robert 2013-05-09 19:39:40