メモ帳のチュートリアルと非常によく似た、単純にデータを保存してリスト ビューに表示する Android アプリケーションがあります。残念ながら、私の Add アクティビティは途中で機能しなくなったようです。データを追加しようとして [確認] を押すと、アクティビティがリロードされ (画面がわずかにちらつきます)、フィールドに入力したデータはすべて消去されます。onSaveInstanceState()に到達していないことを確認しました。このメソッドは、finish() で自動的に呼び出されるという印象を受けました。前述のように、一度は機能していました。私のコードにエラーが発生した場所を誰かが見つけられるでしょうか? 関連する部分であると思われるものを貼り付けます。
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//Verify that fields are filled out
String description = mDescriptionText.getText().toString();
String amount = mAmountText.getText().toString();
if(description.length() == 0 || amount.length() == 0) {
if(description.length() == 0) {
Context context = getApplicationContext();
CharSequence text = "A description is required";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
else {
Context context = getApplicationContext();
CharSequence text = "An amount is required";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
}
else {
/* Call this to set the result that your activity will return to its caller */
setResult(RESULT_OK);
/* Call this when your activity is done and should be closed. The ActivityResult is propagated back to
whoever launched you via onActivityResult() */
finish();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i("expEdit","onSaveInstance State Reached");
super.onSaveInstanceState(outState);
saveState();
outState.putSerializable(EZBudgetDbAdapter.KEY_ROWID, mRowId);
}
private void saveState() {
Log.i("expEdit","saveState Reached");
String description = mDescriptionText.getText().toString();
String amount = mAmountText.getText().toString();
Double dAmount = 0.0;
if(amount != "") {
dAmount = Double.valueOf(amount).doubleValue();
}
if (mRowId == null) {
long id = mExpDbHelper.createExpenditure(description, dAmount);
if (id > 0) {
mRowId = id;
}
if (mSaveDesc.isChecked()) {
// Save the description to the CommonDesc table
mCommDbHelper = new CommonDescDbAdapter(this);
mCommDbHelper.open();
mCommDbHelper.createCommonDesc(description);
}
} else {
mExpDbHelper.updateExpenditure(mRowId, description, dAmount);
if (mSaveDesc.isChecked()) {
// Save the description to the CommonDesc table
mCommDbHelper = new CommonDescDbAdapter(this);
mCommDbHelper.open();
mCommDbHelper.createCommonDesc(description);
}
}
}