2013-04-01 31 views
0

我正在嘗試拍攝我正在繪製的圖表的屏幕截圖,但每次我嘗試獲取NullExceptionPointer在Android中進行屏幕截圖時出錯

這裏是我的代碼:

lineChart.setChartData(array1,array2,xd); 
View v1 = lineChart.getRootView(); 
v1.setDrawingCacheEnabled(true); 
bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
v1.setDrawingCacheEnabled(false); 

lineChart是一個自定義視圖

這logcat的表示該行空:bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 這裏是我的logcat:

04-01 19:21:11.524: E/AndroidRuntime(333): FATAL EXCEPTION: main 

04-01 19:21:11.524: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.appui/com.example.appui.CompareActivity}: java.lang.NullPointerException 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 

04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.os.Looper.loop(Looper.java:123) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-01 19:21:11.524: E/AndroidRuntime(333): at java.lang.reflect.Method.invokeNative(Native Method) 
04-01 19:21:11.524: E/AndroidRuntime(333): at java.lang.reflect.Method.invoke(Method.java:507) 
04-01 19:21:11.524: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-01 19:21:11.524: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-01 19:21:11.524: E/AndroidRuntime(333): at dalvik.system.NativeStart.main(Native Method) 
04-01 19:21:11.524: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.graphics.Bitmap.createBitmap(Bitmap.java:367) 
04-01 19:21:11.524: E/AndroidRuntime(333): at com.example.appui.CompareActivity.onCreate(CompareActivity.java:37) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-01 19:21:11.524: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
04-01 19:21:11.524: E/AndroidRuntime(333): ... 11 more 
+0

你究竟在哪裏得到例外? logcat應該告訴你哪個對象爲空。 – DigCamara

+0

在這一點上:bitmap = Bitmap.createBitmap(v1.getDrawingCache()); – user2137817

+0

我猜v1是某種程度上爲空。調試並檢查一次。 –

回答

0

我的天堂沒有使用getRootView,但the documentation說明它

返回包含此視圖

如果是本身最上面的查看最上面的視圖,它會返回null。嘗試

View v1 = (View)lineChart; 

改爲。

the documentation(從here),我想你可以強制繪圖緩存通過添加

// this is the important code :) 
// Without it the view will have a dimension of 0,0 and the bitmap will be null   
    v1.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    v1.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 
    v1.buildDrawingCache(); 

你得到

bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
+0

我嘗試了,仍然是相同的錯誤 – user2137817

+0

19:21:11.524:E/AndroidRuntime(333):致命異常:主 19:21:11.524:E/AndroidRuntime(333):了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.appui/com.example.appui.CompareActivity}: java.lang.NullPointerException 04-01 19:21:11.524:E/AndroidRuntime(333):\t at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1647) 04-01 19:21:11.524:E/AndroidRuntime(333):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)&no it can not the lineChart.setChartData (數組1,數組2,XD);因爲它工作之前,我添加屏幕拍攝代碼 – user2137817

+0

我添加了logcat到我的問題 – user2137817

0

文檔的位圖View.getDrawingCache(boolean)狀態之前建成:

返回這個位圖繪圖被緩存。 緩存禁用時返回的 位圖爲空。

使用setDrawingCacheEnabled(boolean)將繪圖緩存設置爲true。您還可以使用isDrawingCacheEnabled()檢查繪圖緩存是否已啓用。

+0

我已經啓用了繪圖緩存v1.setDrawingCacheEnabled(true); – user2137817

+0

嗯你更新你的問題或什麼?起初我並沒有看到那是爲什麼開啓繪圖緩存很可能解決問題的原因。 – praneetloke

+0

不,我沒有,它在那裏從一開始 – user2137817