it-swarm.com.de

Konvertieren Sie Uri in String und String in Uri

Ich entwickle eine Anwendung, die das Auswählen eines Bildes von der SD-Karte ermöglicht, in der Datenbank speichern und diesen Wert für ImageView einstellen. Ich muss wissen, wie man Uri in String und String in Uri konvertiert. Jetzt habe ich die getEncodedPath () - Methode von Uri verwendet, aber dieser Code funktioniert beispielsweise nicht:

ImageView iv=(ImageView)findViewById(R.id.imageView1);
Uri uri=Uri.parse("/external/images/media/470939");
Log.e("uri1", uri.toString());
iv.setImageURI(uri);

Daher weiß ich nicht, wie ich Uri in einer Datenbank speichern und aus gespeicherten Werten einen neuen Uri erstellen kann. Bitte helfen Sie mir, das Problem zu beheben. 

32
user2218845

Ich muss wissen, wie man Uri in String und String in Uri konvertiert. 

Verwenden Sie toString(), um eine Uri in eine String umzuwandeln. Verwenden Sie Uri.parse(), um eine String in eine Uri umzuwandeln.

dieser Code funktioniert nicht

Dies ist keine gültige Zeichenfolgendarstellung einer Uri. Eine Uri hat ein Schema und "/external/images/media/470939" hat kein Schema.

54
CommonsWare

Versuchen Sie dies, um String in URI zu konvertieren

String mystring="Hello"
Uri myUri = Uri.parse(mystring);

Uri zu String 

Uri uri;
String uri_to_string;
uri_to_string= uri.toString();
2
Gibs

Dadurch wird der Dateipfad von MediaProvider, DownloadsProvider und ExternalStorageProvider abgerufen, während auf die inoffizielle ContentProvider-Methode zurückgegriffen wird, die Sie erwähnen.

   /**
 * Get a file path from a Uri. This will get the the path for Storage Access
 * Framework Documents, as well as the _data field for the MediaStore and
 * other file-based ContentProviders.
 *
 * @param context The context.
 * @param uri The Uri to query.
 * @author paulburke
 */
public static String getPath(final Context context, final Uri uri) {

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat;

    // DocumentProvider
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }

            // TODO handle non-primary volumes
        }
        // DownloadsProvider
        else if (isDownloadsDocument(uri)) {

            final String id = DocumentsContract.getDocumentId(uri);
            final Uri contentUri = ContentUris.withAppendedId(
                    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

            return getDataColumn(context, contentUri, null, null);
        }
        // MediaProvider
        else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }

            final String selection = "_id=?";
            final String[] selectionArgs = new String[] {
                    split[1]
            };

            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {
        return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

/**
 * Get the value of the data column for this Uri. This is useful for
 * MediaStore Uris, and other file-based ContentProviders.
 *
 * @param context The context.
 * @param uri The Uri to query.
 * @param selection (Optional) Filter used in the query.
 * @param selectionArgs (Optional) Selection arguments used in the query.
 * @return The value of the _data column, which is typically a file path.
 */
public static String getDataColumn(Context context, Uri uri, String selection,
        String[] selectionArgs) {

    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {
            column
    };

    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
                null);
        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}


/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is ExternalStorageProvider.
 */
public static boolean isExternalStorageDocument(Uri uri) {
    return "com.Android.externalstorage.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is DownloadsProvider.
 */
public static boolean isDownloadsDocument(Uri uri) {
    return "com.Android.providers.downloads.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is MediaProvider.
 */
public static boolean isMediaDocument(Uri uri) {
    return "com.Android.providers.media.documents".equals(uri.getAuthority());
}
1
Naveen Kumar M

Ich bin nicht sicher, ob Sie dieses Problem gelöst haben ... Um den Kommentar von "CommonsWare" weiter zu verfolgen.

Dies ist keine gültige Zeichenfolgendarstellung eines Uri. Ein Uri hat ein Schema und "/ external/images/media/470939" hat kein Schema.

Veränderung

Uri uri=Uri.parse("/external/images/media/470939");

zu

Uri uri=Uri.parse("content://external/images/media/470939");

in meinem Fall

Uri uri = Uri.parse("content://media/external/images/media/6562");
0
MyPoint