当我进入此页面并单击“后退”按钮时,我会强制关闭,因为它会强制关闭,但条码扫描结果不会显示。如何停止强制关闭应用程序?

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

最佳答案

由于线条的缘故,您的力量越来越大

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


在saveState()中。当您按下后退按钮时,其中一个TextViews为空。

注意错误日志中的这一行

 java.lang.NumberFormatException: Invalid int: ""


当您对无效的字符串运行parseInt时,将引发此错误。在这种情况下,它告诉您字符串为空。您需要先检查字符串是否为空,然后再运行parseInt或在方法周围进行try catch。

祝好运。

10-07 23:26