当前位置:编程学习 > wap >>

我的程序在模拟器第一次运行正确,退出运行第二次就报错

我的程序在模拟器第一次运行正确,退出运行第二次就报错,第三次运行又是正确,第四次又出错,这是为什么??????
代码如下,都是提示红色那句空指针错误 ,但是数据库里是有内容的啊,而且出错后下一次又可以正常运行,高手帮我看看呀



private void initInfo() {

db = SplashScreenActivity.db;
monthTextView.setText(month);
Cursor cursor = db.rawQuery("select sum(amount) from table_record where strftime('%Y%m',DATE)=?", new String[]{year + month});
if (cursor.moveToNext()) {
costAmount=(int) cursor.getDouble(0);
monthCostTextView.setText("¥ " + cursor.getDouble(0));
}

 cursor = db.rawQuery("select sum(budget) from table_category",null);
if (cursor.moveToNext()) {
budgetAmount=(int)cursor.getDouble(0);
monthBudgetTextView.setText("¥ " + cursor.getDouble(0));
}
cursor.close();
} --------------------编程问答-------------------- 难道木有人知道为什么么么么么 --------------------编程问答-------------------- 难道没有高手知道这是啥问题吗!!!!CSDN神器救救我吧啊啊 啊  啊啊 --------------------编程问答-------------------- 发log。最好自己打debug看看。代码中对cursor做非空判断。 --------------------编程问答-------------------- 原来是cursor不是空的,但是db是空的。。。谢谢了 --------------------编程问答--------------------
引用 3 楼 wlcw16 的回复:
发log。最好自己打debug看看。代码中对cursor做非空判断。

log:
05-08 05:19:40.151: E/AndroidRuntime(1711): FATAL EXCEPTION: main
05-08 05:19:40.151: E/AndroidRuntime(1711): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myandroid.graduationDesign/com.myandroid.graduationDesign.MainActivity}: java.lang.NullPointerException
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.os.Looper.loop(Looper.java:137)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread.main(ActivityThread.java:4424)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at java.lang.reflect.Method.invokeNative(Native Method)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at java.lang.reflect.Method.invoke(Method.java:511)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at dalvik.system.NativeStart.main(Native Method)
05-08 05:19:40.151: E/AndroidRuntime(1711): Caused by: java.lang.NullPointerException
05-08 05:19:40.151: E/AndroidRuntime(1711):  at com.myandroid.graduationDesign.MainActivity.initInfo(MainActivity.java:133)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at com.myandroid.graduationDesign.MainActivity.onCreate(MainActivity.java:65)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.Activity.performCreate(Activity.java:4465)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-08 05:19:40.151: E/AndroidRuntime(1711):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-08 05:19:40.151: E/AndroidRuntime(1711):  ... 11 more
--------------------编程问答--------------------
引用 4 楼 lclc_cufe 的回复:
原来是cursor不是空的,但是db是空的。。。谢谢了

解决了? --------------------编程问答--------------------
引用 6 楼 wlcw16 的回复:
Quote: 引用 4 楼 lclc_cufe 的回复:

原来是cursor不是空的,但是db是空的。。。谢谢了

解决了?

木有解决。。。刚刚以为解决了。。。。好像是db的关系,请问activityfinish之后要不要close db? --------------------编程问答--------------------
引用 7 楼 lclc_cufe 的回复:
Quote: 引用 6 楼 wlcw16 的回复:

Quote: 引用 4 楼 lclc_cufe 的回复:

原来是cursor不是空的,但是db是空的。。。谢谢了

解决了?

木有解决。。。刚刚以为解决了。。。。好像是db的关系,请问activityfinish之后要不要close db?


db用完了必须关上啊。。。 --------------------编程问答--------------------
引用 8 楼 wlcw16 的回复:
Quote: 引用 7 楼 lclc_cufe 的回复:

Quote: 引用 6 楼 wlcw16 的回复:

Quote: 引用 4 楼 lclc_cufe 的回复:

原来是cursor不是空的,但是db是空的。。。谢谢了

解决了?

木有解决。。。刚刚以为解决了。。。。好像是db的关系,请问activityfinish之后要不要close db?


db用完了必须关上啊。。。

在哪关啊?每次activity结束之后就要关吗?不能整个程序退出再关? --------------------编程问答-------------------- cursor关了db就该关上。下次用的时候再打开 --------------------编程问答--------------------
引用 3 楼 wlcw16 的回复:
发log。最好自己打debug看看。代码中对cursor做非空判断。

那下次用的时候还得再db.open()吗?需要再实例化一次吗 --------------------编程问答--------------------
引用 10 楼 wlcw16 的回复:
cursor关了db就该关上。下次用的时候再打开

我能请教您一下,为什么我程序第一次运行,main里面的db不是空的,在模拟器上运行第二次db就是空的了?(在main之前还有个闪屏程序) --------------------编程问答--------------------
引用 12 楼 lclc_cufe 的回复:
Quote: 引用 10 楼 wlcw16 的回复:

cursor关了db就该关上。下次用的时候再打开

我能请教您一下,为什么我程序第一次运行,main里面的db不是空的,在模拟器上运行第二次db就是空的了?(在main之前还有个闪屏程序)

是不是我退出程序有问题,代码如下:
db.close();
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());  
这样有问题吗? --------------------编程问答--------------------
引用 12 楼 lclc_cufe 的回复:
Quote: 引用 10 楼 wlcw16 的回复:

cursor关了db就该关上。下次用的时候再打开

我能请教您一下,为什么我程序第一次运行,main里面的db不是空的,在模拟器上运行第二次db就是空的了?(在main之前还有个闪屏程序)

你说的空是指null,还是db内容是空的?
如果是null,你先去看看你拿db的method有什么问题么。debug去跟踪一下。 --------------------编程问答--------------------
引用 14 楼 wlcw16 的回复:
Quote: 引用 12 楼 lclc_cufe 的回复:

Quote: 引用 10 楼 wlcw16 的回复:

cursor关了db就该关上。下次用的时候再打开

我能请教您一下,为什么我程序第一次运行,main里面的db不是空的,在模拟器上运行第二次db就是空的了?(在main之前还有个闪屏程序)

你说的空是指null,还是db内容是空的?
如果是null,你先去看看你拿db的method有什么问题么。debug去跟踪一下。

我觉得吧,我第一次运行没有错,说明应该是程序退出出错了,您看下我代码这样写可以吗?
db.close();
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());   --------------------编程问答-------------------- 看你的运行情况就知道有什么东西没关掉,在onpause里面加上退出程序或者关闭DB就行  --------------------编程问答-------------------- db.close 否则内存泄漏!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,