2014-12-16 3 views
1

Может кто-нибудь объяснить мне, почему я получаю java.lang.IllegalStateException: Не удалось выполнить метод активности при попытке щелкнуть по кнопке, чтобы получить данные из базы данных?IllegalStateException: Не удалось выполнить метод действия

мой XML-код имеет OnClick, как это:

мой mainactivity код:

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; 
} 


Я не знаю, что не так, потому что это происходит только тогда, когда метод, который Я пытаюсь выполнить, вернет данные. Как и код выше, он возвращает float.

Ошибка:

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) 
+0

Можете ли вы отправить стопку (вывод logcat)? Я думаю, у вас есть проблема с базой данных ... – Opiatefuchs

ответ

2

Это вызвано 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 в методе общей сложности.

Я предполагаю, что у вас нет строк в таблице для вычисления суммы.

+0

, но он все равно вернет нуль, не так ли? исправьте меня, если я ошибаюсь – akoxi

+0

Он говорит, что null не равен нулю, вы должны проверить, является ли оно нулевым или нет. – Chk0nDanger

+0

select sum (x) from table_x возвращает всегда строку, но если нет строк данных, «sum (x)» может быть нулевой! – Chk0nDanger

1

Если таблица не содержит данных, SUM(column) вернет SQL NULL.

getString() по значению столбца NULL вернет Java null.

parseFloat(null) вызывает исключение.

Рассмотрите возможность проверки нулевого значения, прежде чем пытаться его проанализировать.

+0

Да. Я понял! Спасибо! – akoxi

Смежные вопросы