【问题标题】:IllegalStateException: Could not execute method of the activityIllegalStateException:无法执行活动的方法
【发布时间】:2014-12-16 16:51:33
【问题描述】:

有人可以向我解释为什么我得到 java.lang.IllegalStateException:尝试单击按钮以从数据库中获取数据时无法执行活动方法?

我的 xml 代码有一个这样的 onClick:

<Button
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:text="Delete"
        android:id="@+id/btnDelete"
        android:layout_weight="1"
        android:onClick="onClick_DeleteAll"/>

我的主要活动代码:

public void onClick_DeleteAll(View view){
    DBTools dbTools = new DBTools(getApplicationContext())
    float total = dbTools.total();
}

我的数据库类(DBTools.java)代码:

public float total(){
    float total = 0;
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT Sum("+ PRICE +") FROM " + TABLE_ITEM_SELL, null);
    if (cursor.moveToFirst()){
        total = Float.parseFloat(cursor.getString(0));
    }

    return total;
}


我不知道出了什么问题,因为它仅在我尝试执行的方法返回数据时发生。和上面的代码一样,它返回浮点数。

错误:

java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:3591)
        at android.view.View.performClick(View.java:4084)
        at android.view.View$PerformClick.run(View.java:16966)
        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:4745)
        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:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at android.view.View$1.onClick(View.java:3586)
at android.view.View.performClick(View.java:4084)
            at android.view.View$PerformClick.run(View.java:16966)
            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:4745)
            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:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at java.lang.StringToReal.parseFloat(StringToReal.java:285)
            at java.lang.Float.parseFloat(Float.java:300)
            at com.jcarlapp.carl.amystore.DBTools.total(DBTools.java:151)
            at com.jcarlapp.carl.amystore.MainActivity.onClick_DeleteAll(MainActivity.java:306)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at android.view.View$1.onClick(View.java:3586)
            at android.view.View.performClick(View.java:4084)
            at android.view.View$PerformClick.run(View.java:16966)
            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:4745)
            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:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 能否请您发布堆栈跟踪(logcat 输出)?我认为您的数据库有问题...

标签: android illegalstateexception


【解决方案1】:

NPE引起的

Caused by: java.lang.NullPointerException
            at java.lang.StringToReal.parseFloat(StringToReal.java:285)
            at java.lang.Float.parseFloat(Float.java:300)
            at com.jcarlapp.carl.amystore.DBTools.total(DBTools.java:151)

似乎cursor.getString(0) 在方法总数中返回null

我假设表中没有行来计算总和。

【讨论】:

  • 但它仍然会返回零,对吗?如果我错了,请纠正我
  • 它说null不是零,你必须检查它是否为null。
  • select sum(x) from table_x 总是返回一行,但如果没有数据行,“sum(x)”可以为空!
  • 我明白了!我从没想过 sqlite 有点不同。因为在其他 sql(例如 mssql)中,我认为它仍然返回零。谢谢!
【解决方案2】:

如果表不包含任何数据,SUM(column) 将返回 SQL NULL

getString() 上的 NULL 列值将返回 Java null

parseFloat(null) 导致异常。

考虑在尝试解析之前检查空值。

【讨论】:

  • 是的。我知道了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多