当我进入此页面并单击后退按钮时,我会强制关闭,因为它强制关闭我的条形码扫描结果不显示。如何阻止app强制关闭?
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
答案 0 :(得分:2)
由于行
,你正在关闭一个力量int quantity =Integer.parseInt( mquantityint.getText().toString());
int barcode =Integer.parseInt( mbarcodeint.getText().toString());
在saveState()中。当你按下后退按钮时,其中一个TextView是空的。
请注意错误日志中的这一行
java.lang.NumberFormatException: Invalid int: ""
在无效字符串上运行parseInt时抛出此异常。在这种情况下,它告诉你字符串是空的。在运行parseInt之前,您需要检查字符串是否为空,或者在方法周围抛出try catch。
祝你好运。答案 1 :(得分:0)
Result.setText("");
从您的代码中解析为字符串,以获得numberformat异常。 只需检查简单的条件,然后将其转换为整数,如下面的::
if(Result.getText()!="" ||Result.getText()!=null)
int barcode =Integer.parseInt( mbarcodeint.getText().toString());
else
int barcode =0;
在上面你可以删除其他部分作为[你的要求