1

カーソルを使用して、URI で指定されたファイルを読み取ろうとしています。しかし、私が示したパスからエラーが読み取られないように見える場所がわかりません

これはコードです:

 public static Uri getRandomImage(ContentResolver resolver) {

    String[] projection = new String[] {
        BaseColumns._ID,

    };


    Uri uri = Media.getContentUri("/sdcard/DCIM/Wallpaper/");

    String[] selectionArgs = null; // there is no ? in selection so null here

    String sortOrder = null; // unordered
    Cursor cursor = resolver.query(uri, projection, null, selectionArgs, sortOrder);

    if (cursor == null || cursor.getCount() <= 0) {
            return null;
    }

    cursor.moveToPosition(new Random().nextInt(cursor.getCount()));

    return Uri.withAppendedPath(uri, cursor.getString(0));
}

これは、新しいエラーがあるコードです。

ParcelFileDescriptor pfd;

    try {
        pfd = context.getContentResolver().openFileDescriptor(uri, "r"); //line with error
    } catch(FileNotFoundException fnfe) {
        Log.e(LOG_TAG, Log.getStackTraceString(fnfe));
        return null;
    }

これは丸太の猫です:

E/it.bisemanuDEV.slidepuzzle.TileView(11188): java.io.FileNotFoundException: No content provider: 
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:464)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:380)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at it.bisemanuDEV.slidepuzzle.TileView.getImageFromUri(TileView.java:560)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at it.bisemanuDEV.slidepuzzle.TileView.onDraw(TileView.java:239)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.View.draw(View.java:6741)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.View.draw(View.java:6744)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.View.draw(View.java:6744)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.View.draw(View.java:6744)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.widget.FrameLayout.draw(FrameLayout.java:352)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewRoot.draw(ViewRoot.java:1407)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.os.Handler.dispatchMessage(Handler.java:99)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.os.Looper.loop(Looper.java:123)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at android.app.ActivityThread.main(ActivityThread.java:4627)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at java.lang.reflect.Method.invokeNative(Native Method)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at java.lang.reflect.Method.invoke(Method.java:521)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/it.bisemanuDEV.slidepuzzle.TileView(11188):   at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

0

このクラスMediaStore.Filesは、API レベル 11 以降でのみ使用できます ( http://developer.android.com/reference/android/provider/MediaStore.htmlを参照)。

Android のバージョンが低いデバイスで使用しようとすると、このエラーが発生します。

于 2012-09-10T13:29:37.870 に答える
0

メソッドのvolumeNameパラメータを誤解している可能性があります。getContentUri()

「内部」または「外部」のいずれかである必要があります ( MediaStore.Images.Media.getContentUri(String volumeName):Uri の機能を参照してください) 。

于 2012-09-10T14:00:06.927 に答える