【问题标题】:Android: how to sum real values from Sqlite?Android:如何对 Sqlite 的实际值求和?
【发布时间】:2011-09-26 19:40:53
【问题描述】:

我有以下代码来获取实际值的总和(存储在 SQlite DB 中的债务金额:

public double getsumdebt() {
        Cursor mCursor = db.rawQuery("SELECT SUM(CurrentAmount) FROM tblDebts", null);
        if(mCursor.moveToFirst()) {
        return mCursor.getDouble(0);
    }
    return mCursor.getDouble(0);
    }

我正在尝试返回“CurrentAmount”列中所有值的总和并将其显示在文本视图中:

 DbAdapter db2 = new DbAdapter(this);
 double sum= new Double(db2.getsumdebt());
 //sum = db2.getsumdebt();
  bar.setText("Progress: "+currencysymbol +current +" / " + currencysymbol + sum);

但是,当我在模拟器中运行应用程序时,我会在启动期间强制关闭,并在 DDMS 日志中显示以下内容:

09-26 19:01:19.098: 错误/AndroidRuntime(677): 致命异常: main 09-26 19:01:19.098: 错误/AndroidRuntime(677): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.evanrich.android.debtdestroyer/com.evanrich.android.debtdestroyer.mainActivity}: java.lang 。空指针异常 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.os.Handler.dispatchMessage(Handler.java:99) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.os.Looper.loop(Looper.java:123) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 java.lang.reflect.Method.invokeNative(Native Method) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 java.lang.reflect.Method.invoke(Method.java:521) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-26 19:01:19.098:错误/AndroidRuntime(677):在 dalvik.system.NativeStart.main(本机方法) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 由: java.lang.NullPointerException 引起 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 com.evanrich.android.debtdestroyer.database.DbAdapter.getsumdebt(DbAdapter.java:106) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 com.evanrich.android.debtdestroyer.mainActivity.onCreate(mainActivity.java:73) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-26 19:01:19.098: 错误/AndroidRuntime(677): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-26 19:01:19.098: 错误/AndroidRuntime(677): ... 11 更多

看起来它无法对存储在数据库中的实际值求和。谁能帮帮我?

仅供参考,这是我的表构造函数:

private static final String DATABASE_CREATE =
    "CREATE TABLE IF NOT EXISTS tblDebts (_id integer primary key autoincrement, "
    + "Debt text not null, StartingAmount real, CurrentAmount real, " 
    + "InterestRate real, DueDate integer, MinimumPayment real );";

谢谢。

【问题讨论】:

    标签: java android sqlite sum real-datatype


    【解决方案1】:

    你有一个 NPE

    19:01:19.098: ERROR/AndroidRuntime(677): Caused by: java.lang.NullPointerException 09-26 19:01:19.098: ERROR/AndroidRuntime(677): at com.evanrich.android.debtdestroyer.database .DbAdapter.getsumdebt(DbAdapter.java:106) 09-26

    第 106 行是什么?

    【讨论】:

    • DbAdapter 中的第 106 行是:Cursor mCursor = db.rawQuery("SELECT SUM(CurrentAmount) from tblDebts", null);
    • 所以,db很可能是null,用调试器检查一下。
    • 你是对的..我没有为此适配器调用正确的打开..使用以下 DbAdapter db2 = new DbAdapter(this); 修复它db2.open();双倍总和 = db2.getsumdebt(); bar.setText("进度:"+currencysymbol +current +" / " + currencysymbol + sum); db2.close();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2011-12-20
    • 1970-01-01
    • 2014-12-30
    • 2014-12-21
    • 2011-10-16
    • 2023-03-22
    相关资源
    最近更新 更多