Исключение диаграммы Android

#android #charts

#Android #Диаграммы

Вопрос:

Я использую диаграммы в своем приложении для извлечения определенного значения из моей базы данных (в моем приложении 5 значений), значений, которые представляют бюджет. Я получаю принудительное закрытие, когда моя база данных все еще пуста. Что мне следует делать в этом случае, когда моя база данных пуста, чтобы не получить принудительное закрытие?

Это мой код:

 package com.ShoppingList.Budget;

import com.ShoppingList.R;
import com.ShoppingList.databases.DbAdapter;
import com.kidroid.kichart.model.Aitem;
import com.kidroid.kichart.view.LineView;

import android.app.Activity;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Toast;

public class Grafic extends Activity {

    LineView lv;
    private DbAdapter db;
    private Cursor cr;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        db = new DbAdapter(this);
        db.open();

        cr = db.getAllBudget();
        startManagingCursor(cr);

        String[] data = new String[cr.getCount()];
        int j = 0;
        if (cr != null amp;amp; cr.moveToFirst()) {
            do {
                data[j] = db.getDataBudget(cr);
                System.out.println("@@@"   data[j]   "!!!");
                j  ;
            } while (cr.moveToNext());
        } else
            Toast.makeText(this, "There are no data to share", 0).show();

        String datagrafic[] = new String[5];
        int k = 0;
        if (data.length >= 5) {
            for (int i = (data.length - 5); i < data.length; i  ) {
                datagrafic[k] = data[i];
                k  ;
            }
        } else
            for (int i = 0; i < data.length; i  ) {
                datagrafic[k] = data[i];
                k  ;
            }

        float[] budgets = new float[cr.getCount()];
        int i = 0;
        if (cr != null amp;amp; cr.moveToFirst()) {

            do {
                budgets[i] = Float.valueOf(db.getBudget(cr));
                i  ;
            } while (cr.moveToNext());
        } else
            Toast.makeText(this, "There are no data to share", 0).show();

        float[] budgetgrafic = new float[6];
        int m = 0;
        if (budgets.length >= 5) {
            for (i = budgets.length - 5; i < budgets.length; i  ) {
                budgetgrafic[m] = budgets[i];
                m  ;
            }
        } else {
            for (i = 0; i < budgets.length; i  ) {
                budgetgrafic[m] = budgets[i];
                m  ;
            }
        }

        Aitem items[] = new Aitem[1];
        if (cr != null) {
            items[0] = new Aitem(Color.RED, "Evolution", budgetgrafic);

            lv = new LineView(this);

            lv.setTitle("Budget");

            lv.setAxisValueX(datagrafic);

            lv.setItems(items);

            setContentView(lv);
        } else
            Toast.makeText(this, "There are no data to share", 0).show();
    }

}
  

В logcat:

 java.lang.NullPointerException

   at android.graphics.Canvas.drawText(Native Method)

  at com.kidroid.kichart.view.AxisView.drawAxisXY(AxisView.java:82)

 at com.kidroid.kichart.view.LineView.onDraw(LineView.java:19)

android.view.View.draw(View.java:6535)

    at android.view.ViewGroup.drawChild(ViewGroup.java:1531)

06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.View.draw(View.java:6538)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.View.draw(View.java:6538)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.View.draw(View.java:6538)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewRoot.draw(ViewRoot.java:1349)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.os.Looper.loop(Looper.java:123)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at java.lang.reflect.Method.invokeNative(Native Method)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at java.lang.reflect.Method.invoke(Method.java:521)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-04 14:50:43.140: ERROR/AndroidRuntime(25306):     at dalvik.system.NativeStart.main(Native Method)
06-04 14:50:45.699: ERROR/gralloc(59): [unregister] handle 0x41cf40 still locked (state=40000001)
  

Ответ №1:

Оберните код, который потенциально может сгенерировать исключение, соответствующим обработчиком исключений. Если вы проверите выходные данные logcat, вы увидите, какое именно исключение генерируется (и трассировку стека во время исключения; ваша последняя выполненная строка кода будет находиться в пределах этой трассировки).

Комментарии:

1. Я ввожу try { lv.setAxisValueX(datagraf); lv.setItems (items); setContentView(lv); } catch (исключение e) { e.printStackTrace (); } и у меня все еще есть принудительное закрытие. Я выполнил отладку, и все работает нормально до конца класса, а затем я получаю принудительное закрытие. В DDMS я получаю исключение nullpointerexception.

2. Вы уверены, что исключение возникает в рамках одного из этих вызовов? Что включает трассировка стека исключения?