0

このページに移動して [戻る] ボタンをクリックすると、バーコード スキャンの結果が表示されず、強制的に閉じられるため、強制的に閉じられます。アプリの強制終了を停止するにはどうすればよいですか?

private EditText mTitleText;
private EditText mBodyText;
private EditText mquantityint;
private EditText mbarcodeint;
private Long mRowId;
private NotesDbAdapter mDbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDbHelper = new NotesDbAdapter(this);
    mDbHelper.open();

    setContentView(R.layout.note_edit);

    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);
    mquantityint = (EditText) findViewById(R.id.quantity);
    mbarcodeint = (EditText) findViewById(R.id.barcode);

    Button barcode2 = (Button) findViewById(R.id.sbarcode);
    barcode2.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0)
        {
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
            intent.putExtra("SAVE_HISTORY", false);//this stops saving ur barcode in barcode scanner app's history
            startActivityForResult(intent, 0);
        }
    });

    Button confirmButton = (Button) findViewById(R.id.confirm);

    mRowId = (savedInstanceState == null) ? null :
        (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
    if (mRowId == null) {
        Bundle extras = getIntent().getExtras();
        mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                : null;
    }

    populateFields();

    confirmButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            setResult(RESULT_OK);
            finish();
        }
    });
}

private void populateFields() {
    if (mRowId != null) {
        Cursor note = mDbHelper.fetchNote(mRowId);
        startManagingCursor(note);
        mTitleText.setText(note.getString(
                note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
        mBodyText.setText(note.getString(
                note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
        mquantityint.setText(note.getString(
                note.getColumnIndexOrThrow(NotesDbAdapter.KEY_QUANTITY)));
        mbarcodeint.setText(note.getString(
                note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BARCODE)));
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    saveState();
    outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId);
}

@Override
protected void onPause() {
    super.onPause();
    saveState();
}

@Override
protected void onResume() {
    super.onResume();
    populateFields();
}

private void saveState() {
    String title = mTitleText.getText().toString();
    String body = mBodyText.getText().toString();
    int quantity =Integer.parseInt( mquantityint.getText().toString());
    int barcode =Integer.parseInt( mbarcodeint.getText().toString());
    if (mRowId == null) {
        long id = mDbHelper.createNote(title, body, quantity, barcode);
        if (id > 0) {
            mRowId = id;
        }
    } else {
        mDbHelper.updateNote(mRowId, title, body, quantity, barcode);
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    String contents =null;
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0)
    {
        if (resultCode == RESULT_OK)
        {
            contents = data.getStringExtra("SCAN_RESULT");
            // String format = data.getStringExtra("SCAN_RESULT_FORMAT");
            //Variable set for QR scan result
            EditText sbarcodeno = (EditText) findViewById(R.id.barcodeno);
            //Variable set to display custom string above result  
            EditText Result =(EditText) findViewById(R.id.sbarcode);
            //Displays actual  
            sbarcodeno.setText(contents);
            //Edit string here    
            Result.setText(""); 
            // TO DO - Modify code so the result launches in another activity.
        } 
        else if (resultCode == RESULT_CANCELED)
        {
            // Handle cancel
        }
    }
}
@Override
public void onBackPressed() {
   this.finish();
   return;
}
}

logcat -

04-13 01:24:47.355: E/AndroidRuntime(2575): FATAL EXCEPTION: main
04-13 01:24:47.355: E/AndroidRuntime(2575): java.lang.RuntimeException: Unable to pause activity {bhavik.smart.shopping/bhavik.smart.shopping.NoteEdit}: java.lang.NumberFormatException: Invalid int: ""
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2706)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2662)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2640)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.access$800(ActivityThread.java:123)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.os.Looper.loop(Looper.java:137)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at java.lang.reflect.Method.invokeNative(Native Method)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at java.lang.reflect.Method.invoke(Method.java:511)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at dalvik.system.NativeStart.main(Native Method)
04-13 01:24:47.355: E/AndroidRuntime(2575): Caused by: java.lang.NumberFormatException: Invalid int: ""
04-13 01:24:47.355: E/AndroidRuntime(2575):     at java.lang.Integer.invalidInt(Integer.java:138)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at java.lang.Integer.parseInt(Integer.java:359)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at java.lang.Integer.parseInt(Integer.java:332)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at bhavik.smart.shopping.NoteEdit.saveState(NoteEdit.java:138)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at bhavik.smart.shopping.NoteEdit.onPause(NoteEdit.java:126)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.Activity.performPause(Activity.java:4563)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1195)
04-13 01:24:47.355: E/AndroidRuntime(2575):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2693)
04-13 01:24:47.355: E/AndroidRuntime(2575):     ... 12 more
4

2 に答える 2

2

あなたは線のために力を近づけています

int quantity =Integer.parseInt( mquantityint.getText().toString());
int barcode =Integer.parseInt( mbarcodeint.getText().toString());

saveState()で。戻るボタンを押しているとき、TextViewの1つは空です。

エラーログのこの行に注意してください

 java.lang.NumberFormatException: Invalid int: ""

これは、無効な文字列に対してparseIntを実行するとスローされます。この場合、文字列が空であることを示しています。parseIntを実行する前に文字列が空でないことを確認するか、メソッドの周りにtrycatchをスローする必要があります。

幸運を。

于 2012-04-13T00:38:04.787 に答える