Java Android:如何从Sqlite求和实际值?

Java Android:如何从Sqlite求和实际值?,java,android,sqlite,sum,real-datatype,Java,Android,Sqlite,Sum,Real Datatype,我有以下代码来获取实际值(存储在SQlite DB中的债务金额)的总和: public double getsumdebt() { Cursor mCursor = db.rawQuery("SELECT SUM(CurrentAmount) FROM tblDebts", null); if(mCursor.moveToFirst()) { return mCursor.getDouble(0); } return mCursor

我有以下代码来获取实际值(存储在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);
但是,当我在emulator中运行应用程序时,我会在启动期间强制关闭,DDMS日志中有以下内容:

09-26 19:01:19.098:错误/AndroidRuntime(677):致命异常:主 09-26 19:01:19.098:ERROR/AndroidRuntime(677):java.lang.RuntimeException:无法启动活动组件信息{com.evanrich.android.debtdestroyer/com.evanrich.android.debtdestroyer.mainActivity}:java.lang.NullPointerException 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.os.Handler.dispatchMessage(Handler.java:99)上 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.os.Looper.loop(Looper.java:123)上 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于android.app.ActivityThread.main(ActivityThread.java:4627) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于java.lang.reflect.Method.invokenactive(本机方法) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于java.lang.reflect.Method.invoke(Method.java:521) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在dalvik.system.NativeStart.main(本机方法) 09-26 19:01:19.098:错误/AndroidRuntime(677):由以下原因引起:java.lang.NullPointerException 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在com.evanrich.android.debteDestroyer.database.DbAdapter.getsumdebt(DbAdapter.java:106) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在com.evanrich.android.debteDestroyer.mainActivity.onCreate(mainActivity.java:73) 09-26 19:01:19.098:ERROR/AndroidRuntime(677):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-26 19:01:19.098:ERROR/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 );";
谢谢。

您有一个NPE

19:01:19.098:ERROR/AndroidRuntime(677):原因:java.lang.NullPointerException 09-26 19:01:19.098:ERROR/AndroidRuntime(677):位于com.evanrich.android.debutdestructor.database.DbAdapter.getsumdebt(DbAdapter.java:106)09-26


哪一行是第106行?

DbAdapter中的第106行是:Cursor mCursor=db.rawQuery(“从tblDebts中选择SUM(currentmount)),null);因此,db很可能为null,请使用调试器检查它。您是正确的。.我没有为此适配器调用正确的open。.使用以下DbAdapter db2=new DbAdapter(this)修复它;db2.open();double sum=db2.getsumdembt();bar.setText(“进度:+currencysymbol+current+”/“+currencysymbol+sum”);db2.close();