2011-06-04 29 views
0

我在我的應用程序中使用圖表從我的數據庫(在我的應用程序中,5個值)中繪製某些值,這些值代表預算。當我的數據庫仍然是空的時候,我強制關閉。在這種情況下,當我的數據庫是空的時候,我應該做什麼來不要強行關閉?Android圖表異常

這是我的代碼:

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

} 

在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) 

回答

2

裹的代碼。如果你檢查你的logcat輸出,你會看到究竟拋出了什麼異常(和異常時的堆棧跟蹤;你最後一次執行的代碼行將在該跟蹤中)。

+0

I put try { \t \t \t lv.setAxisValueX(datagrafic); \t \t \t lv.setItems(items); \t \t \t setContentView(lv); (例外e){ \t \t} catch(Exception e){ \t \t \t e.printStackTrace(); \t \t}我仍然有力量關閉。我做了一個調試,並且一切正常,直到課程結束,然後我得到關閉。在DDMS中,我得到了nullpointerexception。 – Gaby 2011-06-04 14:29:39

+0

您確定在其中一次調用中發生異常嗎?異常的堆棧跟蹤包括什麼? – mah 2011-06-04 14:49:44