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

解决方案 »

  1.   

    难道没有高手知道这是啥问题吗!!!!CSDN神器救救我吧啊啊 啊  啊啊
      

  2.   

    发log。最好自己打debug看看。代码中对cursor做非空判断。
      

  3.   

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

  4.   

    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
      

  5.   

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

  6.   

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

  7.   

    解决了?
    木有解决刚刚以为解决了。好像是db的关系,请问activityfinish之后要不要close db?db用完了必须关上啊
    在哪关啊?每次activity结束之后就要关吗?不能整个程序退出再关?
      

  8.   

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

  9.   

    那下次用的时候还得再db.open()吗?需要再实例化一次吗
      

  10.   

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

  11.   

    我能请教您一下,为什么我程序第一次运行,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.   

    我能请教您一下,为什么我程序第一次运行,main里面的db不是空的,在模拟器上运行第二次db就是空的了?(在main之前还有个闪屏程序)
    你说的空是指null,还是db内容是空的?
    如果是null,你先去看看你拿db的method有什么问题么。debug去跟踪一下。
      

  13.   

    我能请教您一下,为什么我程序第一次运行,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());  
      

  14.   

    看你的运行情况就知道有什么东西没关掉,在onpause里面加上退出程序或者关闭DB就行