-1

フィンガーペインティングアプリケーションを開発しています。ギャラリーから画像をロードするための次のコードがあります(それをペイントするため)。コードは私のスマートフォン (Android 4.2.2 - API 17) で正常に動作しています。しかし、それより低いバージョン (2.3.3 など) で実行すると、実行時エラーが表示され、アプリが閉じられます。

   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
        try {
            // We need to recyle unused bitmaps
            if (bitmap != null) {
                bitmap.recycle();
            }
            InputStream stream = getContentResolver().openInputStream(
                    data.getData());
            myBitmap = BitmapFactory.decodeStream(stream);
            stream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

そしてこれを呼び出すために

Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, REQUEST_CODE);

私の理解では、このコードはすべての API で機能するはずです。ただし、下位バージョンにはいくつかの問題があります。私を助けてください

編集:

(問題を引き起こしていた DISPLAY コードを削除しました。それでも問題は解決しません。ここに新しい logcat があります。LOAD ボタンをクリックした後の LOGCAT

08-25 18:55:51.079: D/ActionBarSherlock(524): [callbackOptionsItemSelected] item: Load
08-25 18:55:51.089: D/ActionBarSherlock(524): [callbackOptionsItemSelected] returning true
08-25 18:55:51.141: D/PhoneWindow(524): couldn't save which view has focus because the focused view com.example.colordraw.CanvasActivity$Canvass@4050a590 has no id.
08-25 18:55:51.159: D/ActionBarSherlock(524): [dispatchPause]
08-25 18:55:51.899: D/ActionBarSherlock(524): [dispatchStop]
08-25 18:55:53.259: D/ActionBarSherlock(524): [dispatchPostResume]
08-25 18:55:53.379: D/AndroidRuntime(524): Shutting down VM
08-25 18:55:53.379: W/dalvikvm(524): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-25 18:55:53.400: E/AndroidRuntime(524): FATAL EXCEPTION: main
08-25 18:55:53.400: E/AndroidRuntime(524): java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.graphics.Canvas.<init>(Canvas.java:83)
08-25 18:55:53.400: E/AndroidRuntime(524):  at com.example.colordraw.CanvasActivity$Canvass.onDraw(CanvasActivity.java:780)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.View.draw(View.java:6880)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.View.draw(View.java:6883)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.widget.FrameLayout.draw(FrameLayout.java:357)
08-25 18:55:53.400: E/AndroidRuntime(524):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewRoot.draw(ViewRoot.java:1522)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.os.Looper.loop(Looper.java:123)
08-25 18:55:53.400: E/AndroidRuntime(524):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-25 18:55:53.400: E/AndroidRuntime(524):  at java.lang.reflect.Method.invokeNative(Native Method)
08-25 18:55:53.400: E/AndroidRuntime(524):  at java.lang.reflect.Method.invoke(Method.java:507)
08-25 18:55:53.400: E/AndroidRuntime(524):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-25 18:55:53.400: E/AndroidRuntime(524):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-25 18:55:53.400: E/AndroidRuntime(524):  at dalvik.system.NativeStart.main(Native Method)
08-25 18:55:56.699: I/Process(524): Sending signal. PID: 524 SIG: 9
4

2 に答える 2

1

ログには次のように書かれています:

java.lang.NoSuchMethodError: android.view.Display.getSize

したがって、これは問題のある行です。

display.getSize(size);

API 13からのみサポートされています。

代わりに、 getResources().getDisplayMetrics()を使用できます。

このようなバグを回避するには、Lint (「V」が入ったチェックボックスのようなボタン) を使用する必要があります。

于 2013-08-24T19:43:18.767 に答える
0

Display.getSize(Point) メソッドは API レベル 13 以降で使用できます。

于 2013-08-24T18:20:20.160 に答える