的Android应用程序崩溃意外地在执行catch块
问题描述:
我在Android的新的,我没有得到为什么它正在发生。的Android应用程序崩溃意外地在执行catch块
在我的数据库,我使用rollno
作为主键。
此代码的工作完美,将数据插入到数据库中,但是当我尝试插入与卷数的数据已经存在于它应该给消息数据库“数据已经存在”,但意外崩溃。
if (v.getId()==R.id.b1) {
int rollno,marks;
String name,m1,rno;
rno=t1.getText().toString();
name=t2.getText().toString();
m1=t3.getText().toString();
rollno=Integer.parseInt(rno);
marks=Integer.parseInt(m1);
try {
db.execSQL("insert into stud values('" + rollno + "','" + name + "','" + marks + "');");
Toast.makeText(getApplicationContext(), "Data saved", Toast.LENGTH_LONG).show();
} catch(Exception e) {
Toast.makeText(getApplicationContext(), "Data already present", Toast.LENGTH_LONG).show();
}
}
logcat的
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+*cf+(
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+*fa88
W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+*fa88
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+)(+/(
W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+)(+/(
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+*cf+(
W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
D/dalvikvm﹕ GC_CONCURRENT freed 333K, 11% free 9617K/10695K, paused 14ms+4ms, total 72ms
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+*cf+(
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+*fa88
W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+*fa88
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+)(+/(
W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
D/SensorManager﹕ unregisterListener:: Trklfufi 9 [email protected],)+)(+/(
D/Sensors﹕ Remain listener = Sending .. normal delay 200ms
I/Sensors﹕ sendDelay --- 200000000
D/SensorManager﹕ JNI - sendDelay
I/SensorManager﹕ Set normal delay = true
W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
D/SensorManager﹕ registerListener :: handle = 4 name= BMA222 3-axis Accelerometer delay= 200000 Trklfufi 9 [email protected],)+-+88(
D/AndroidRuntime﹕ Shutting down VM
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x419222a0)
E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NumberFormatException: Invalid int: ""
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:359)
at java.lang.Integer.parseInt(Integer.java:332)
at com.example.raju.myapp1.MyActivity.onClick(MyActivity.java:111)
at android.view.View.performClick(View.java:4162)
at android.view.View$PerformClick.run(View.java:17082)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4856)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
at dalvik.system.NativeStart.main(Native Method)
答
你期待这Exception
将由catch
块被抓到但是这究竟是什么没有发生
我猜测,在数据库中rollNo
场被指定为主键 ,并且当您尝试再次重新插入相同的卷号时,则会出现此SQLITE异常。因此,在数据库中插入任何记录之前,需要检查是否存在特定的卷号。
我去给你一些伪代码
rollnumber=enteredRolNumber
if(enteredRollNumberisInDatabase)
{
//No insertion and a message that this roll number already exists
}
else
{
//Do your insertion here
}
并在代码中,有这样的不检查,你正在做它像
try {
db.execSQL("insert into stud values('" + rollno + "','" + name + "','" + marks + "');");
Toast.makeText(getApplicationContext(), "Data saved", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), "Data already present", Toast.LENGTH_LONG).show();
}
+0
[见本太](http://stackoverflow.com/questions/8283844/sqliteexception-not-being-caught) – nobalG 2014-11-24 12:30:39
你可以把你的日志? – 2014-11-24 11:55:05
发表您的logcat error..may是存在问题与面包.. – Meenal 2014-11-24 11:55:39
insted的getApplicationContext()使用classname.thisñ尝试... – 2014-11-24 11:56:28