0

描いているチャートのスクリーンショットを撮ろうとしていますが、試みるたびにNullExceptionPointer.

これが私のコードです:

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

lineChartカスタム ビューの場所

この logcat は、この行を null として示しています: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
4

2 に答える 2

0

私はgetRootViewを使用していませんが、ドキュメントにはそれが記載されています

このビューを含む最上位のビューを返します

それ自体が最上位のビューである場合は、null が返されます。試す

View v1 = (View)lineChart;

代わりは。

ドキュメント(およびここから)から、追加することで描画キャッシュを強制的に構築できると思います

    // 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());
于 2013-04-01T18:12:36.300 に答える
0

View.getDrawingCache(boolean)のドキュメントには次のように記載されています。

このビューの描画がキャッシュされているビットマップを返します。キャッシュが無効になっている場合、返されるビットマップは null です。

setDrawingCacheEnabled(boolean)を使用して、描画キャッシュを true に設定します。isDrawingCacheEnabled()を使用して、描画キャッシュが有効になっているかどうかを確認することもできます。

于 2013-04-01T19:48:51.183 に答える