2013-05-01 15 views
24

Ich entwickle eine Anwendung, die ermöglicht, Bild von SD-Karte auszuwählen, speichern Sie es in der Datenbank und setzen Sie diesen Wert für ImageView. Ich muss Weg für die Umwandlung von uri zu Schnur und von Schnur zu uri kennen. Jetzt habe ich getEncodedPath() -Methode von Uri, aber zum Beispiel ist dieser Code nicht funktioniert:Konvertieren von Uri zu String und String zu Uri

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

Deshalb weiß ich nicht, wie ich Uri in Datenbank speichern kann und einen neuen Uri aus gespeicherten Wert schaffen . Bitte hilf mir, es zu beheben.

+0

Was meinst du mit 'es nicht funktioniert'? Welchen Fehler bekommst du? –

+0

Ich habe kein Bild für ImageView – user2218845

Antwort

42

Ich muss Weg für das Umwandeln von uri zu Schnur und Schnur zu uri kennen.

Verwenden toString() ein Uri zu einem String zu konvertieren. Verwenden Sie Uri.parse(), um eine String in eine Uri zu konvertieren.

dieser Code funktioniert nicht

Das ist nicht eine gültige Zeichenfolge Darstellung eines Uri ist. A Uri hat ein Schema und "/external/images/media/470939" hat kein Schema.

+0

Stattdessen versuchen, Uri.fromFile() zu verwenden .. Manchmal Uri.parse schafft Probleme .. – AnkitRox

-2

Sie können Drawable anstelle von Uri verwenden.

ImageView iv=(ImageView)findViewById(R.id.imageView1); 
    String pathName = "/external/images/media/470939"; 
    Drawable image = Drawable.createFromPath(pathName); 
    iv.setImageDrawable(image); 

Dies würde funktionieren.

+0

Nein, es funktioniert nicht –

0

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

/** 
* 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

Versuchen Sie diese Zeichenfolge zu konvertieren uri

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

Uri String

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