#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. Вы уверены, что исключение возникает в рамках одного из этих вызовов? Что включает трассировка стека исключения?