2017-07-03 4 views
0

Ich versuche ein Bild in meine Firebase-Datenbank zu speichern. Ich speichere meine Daten über das Dialogfeld. Was ich jetzt möchte ist, dass ich Bilder hinzufügen möchte, indem ich auf eine Schaltfläche klicke, dann wähle das Bild aus meiner Galerie. Jetzt möchte ich, dass der Weg des Fotos auf dem Dialog und nicht das Bild selbst gezeigt wird. Speichern Sie den Pfad zum Firebase und rufen Sie das Bild selbst in einem anderen Bild in einer Bildansicht ab.ImageView im Dialogbox -Xamarin

Gibt es bitte einen Beispielcode?

+0

Es gibt einige Beispiele, wie man ein Bild aus der Galerie bekommt, wo man den Pfad bekommt und ein Bild zeigt. –

Antwort

0

Ich möchte Bilder hinzufügen, indem ich auf eine Schaltfläche klicke, und dann das Bild aus meiner Galerie auswählen.

Verwenden Chooser ein Bild aus der Galerie auszuwählen:

private void BtnClick_Click(object sender, System.EventArgs e) 
{ 
    Intent intent = new Intent(); 
    intent.SetType("image/*"); 
    intent.SetAction(Intent.ActionGetContent); 
    StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), 0); 
} 

die i die der Pfad des Fotos auf dem Dialog und nicht das Bild selbst zeigen wollen würde. Speichern Sie den Pfad zum Firebase und rufen Sie das Bild selbst in einem anderen Bild in einer Bildansicht ab.

von Chooser verwenden, können Sie den Inhalt URL von OnActivityResult abrufen:

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) 
{ 
    Android.Net.Uri uri = data.Data; 
    string realFilePath=GetRealFilePath(uri); 
    //post the realFilePath to Firebase here 

    //store realFilePath locally to pass it to other activity 
} 

in Firebase den Pfad des Bildes zu speichern, müssen Sie den Inhalt URL zu realen Pfad der Datei konvertieren, indem mit folgenden Codes:

public string GetRealFilePath(Uri uri) 
{ 
    var isDocumentUri = DocumentsContract.IsDocumentUri(this, uri); 
    if (isDocumentUri) 
    { 
     string id = DocumentsContract.GetDocumentId(uri); 
     string[] split = id.Split(':'); 
     string type = split[0]; 
     if (IsMediaDocument(uri)) 
     { 
      Uri contentUri = null; 
      if ("image".Equals(type)) 
      { 
       contentUri = MediaStore.Images.Media.ExternalContentUri; 
       string selection = "_id=?"; 
       string[] selectionArgs = new string[] { split[1] }; 
       string filePath = GetDataColumn(this, contentUri, selection, selectionArgs); 
       return filePath; 
      } 
     } 
    }else 
    { 
     //when select the file directly from gallery, `isDocumentUri` will be false. 
     var contentUri = MediaStore.Images.Media.ExternalContentUri; 
     var selection = "_id=?"; 
     string[] selectionArgs = new string[] { uri.LastPathSegment }; 
     string filePath = GetDataColumn(this, contentUri, selection, selectionArgs); 
     return filePath; 
    } 
    return null; 
} 

public string GetDataColumn(Context context, Uri uri, string selection,string[] selectionArgs) 
{ 

    ICursor cursor = null; 
    string column = "_data"; 
    string[] projection = { 
     column 
    }; 

    try 
    { 
     cursor = ContentResolver.Query(uri, projection, selection, selectionArgs, 
       null); 
     if (cursor != null && cursor.MoveToFirst()) 
     { 
      int column_index = cursor.GetColumnIndexOrThrow(column); 
      return cursor.GetString(column_index); 
     } 
    } 
    finally 
    { 
     if (cursor != null) 
      cursor.Close(); 
    } 
    return null; 
} 

public static bool IsMediaDocument(Uri uri) 
{ 
    return "com.android.providers.media.documents".Equals(uri.Authority); 
} 
Verwandte Themen