2014-05-23 76 views
2

我試圖顯示wheight圖表,使用Achart引擎庫。但我有一個例外:line.addView ...Android:AchartEngine重量圖表layout.addView引發異常

有人可以告訴我我失蹤了什麼。因爲當我嘗試以新的意圖顯示圖表時,它的工作方式非常有限,但是當我嘗試在佈局中顯示它時崩潰。

這是我使用的代碼:

LinearLayout layout; 
    View mChartView ; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_wifi); 

     CategorySeries category = new CategorySeries("Weight indic"); 
     category.add("Current", 75); 
     category.add("Minimum", 65); 
     category.add("Maximum", 90); 

     DialRenderer renderer = new DialRenderer(); 
     renderer.setChartTitleTextSize(20); 
     renderer.setLabelsTextSize(15); 
     renderer.setLegendTextSize(15); 
     renderer.setMargins(new int[] {20, 30, 15, 0}); 

     SimpleSeriesRenderer r = new SimpleSeriesRenderer(); 
     r.setColor(Color.BLUE); 

     renderer.addSeriesRenderer(r); 

     r = new SimpleSeriesRenderer(); 
     r.setColor(Color.rgb(0, 150, 0)); 
     renderer.addSeriesRenderer(r); 
     r = new SimpleSeriesRenderer(); 
     r.setColor(Color.GREEN); 
     renderer.addSeriesRenderer(r); 
     renderer.setLabelsTextSize(10); 
     renderer.setLabelsColor(Color.WHITE); 
     renderer.setShowLabels(true); 
     renderer.setVisualTypes(new DialRenderer.Type[] {Type.ARROW, Type.NEEDLE, Type.NEEDLE}); 
     renderer.setMinValue(0); 
     renderer.setMaxValue(150); 

     layout = (LinearLayout) findViewById(R.id.chart); 

     if (mChartView != null) { 
      layout.removeView(mChartView); 
     } 

     mChartView = ChartFactory.getDialChartView(MyWifiNetwork.this, category, renderer); 

     layout.addView(mChartView, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    } 

而且這個logcat的:

05-23 11:25:03.332: W/dalvikvm(28280): threadid=1: thread exiting with uncaught exception (group=0x40d869a8) 
05-23 11:25:03.365: E/AndroidRuntime(28280): FATAL EXCEPTION: main 
05-23 11:25:03.365: E/AndroidRuntime(28280): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debitdistance/com.example.debitdistance.MyWifiNetwork}: java.lang.NullPointerException 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread.access$600(ActivityThread.java:162) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.os.Handler.dispatchMessage(Handler.java:107) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.os.Looper.loop(Looper.java:194) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread.main(ActivityThread.java:5371) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at java.lang.reflect.Method.invokeNative(Native Method) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at java.lang.reflect.Method.invoke(Method.java:525) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at dalvik.system.NativeStart.main(Native Method) 
05-23 11:25:03.365: E/AndroidRuntime(28280): Caused by: java.lang.NullPointerException 
05-23 11:25:03.365: E/AndroidRuntime(28280): at com.example.debitdistance.MyWifiNetwork.onCreate(MyWifiNetwork.java:227) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.Activity.performCreate(Activity.java:5122) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
05-23 11:25:03.365: E/AndroidRuntime(28280): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
05-23 11:25:03.365: E/AndroidRuntime(28280): ... 11 more 
+2

此行在您的LogCat中引起:java.lang.NullPointerException說您正在使用未引用的對象。這行'在com.example.debitdistance.MyWifiNetwork.onCreate(MyWifiNetwork.java:227)'告訴你錯誤發生的位置 –

+0

是的,正如我所說的,異常指向這行代碼:'layout.addView(mChartView, 0,新的LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));'。但我看不到源錯誤。 – Amina

+1

好吧,我懷疑罪魁禍首是**這行**'mChartView = ChartFactory.getDialChartView(MyWifiNetwork.this,category,renderer);',而是。看起來你沒有在任何地方初始化mChartView **,然後給它賦值(聲明它爲'View mChartView;'仍然將它作爲** null **對象)。所以,你試圖將一個值分配給任何東西。 –

回答

2

這是我用我的一個項目的部分代碼:

// ... 
    // The chart 
    final GraphicalView cht = ChartFactory.getTimeChartView(ctx, ds, renderer, "MMM"); 

    // The chart container 
    final RelativeLayout lay = (RelativeLayout) getView().findViewById(R.id.chart); 
    lay.addView(cht); 
    // ... 

顯然,我正在使用不同的容器,我在一個片段(所以刪除getView()。之前findViewByID),使用timeChartView ..
因此,需要進行一些修改以適應您的代碼。

[編輯]

試試這樣:這些行

// ... 
// The chart 
final GraphicalView mChartView = ChartFactory.getDialChartView(MyWifiNetwork.this, category, renderer); 

// The chart container 
final LinearLayout layout = (LinearLayout) findViewById(R.id.chart); 
layout.addView(mChartView); 
// ... 

將取代所有這些線路

layout = (LinearLayout) findViewById(R.id.chart); 

if (mChartView != null) { 
    layout.removeView(mChartView); 
} 

mChartView = ChartFactory.getDialChartView(MyWifiNetwork.this, category, renderer); 

layout.addView(mChartView, 0, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

請注意,現在您需要刪除這些行:

LinearLayout layout; 
View mChartView; 
+0

仍然是同樣的問題@Der Golem – Amina

+1

讓我試着將我的代碼調整到你的代碼。 –

+0

我編輯了我的答案以符合您的代碼。 –