Android chart exception
I use charts in my app to draw certain value from my database (in my app,5 valueas),values that represent the budget. I get force close when my database is still empty. What should I do in this case,when my database is empty,to not obtain force close?
This is my code:
开发者_开发百科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 && 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 && 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();
}
}
In 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)
Wrap the code that has the potential to generate an exception with an appropriate exception handler. If you examine your logcat output, you'll see exactly what exception is being thrown (and a stack trace at the time of the exception; your last executed line of code will be within that trace).
精彩评论