我正在尝试将图像保存到我的firebase数据库中。我使用对话框保存我的数据。我现在想要的是,我想通过点击按钮添加图像,然后从我的图库中选择图片。现在我希望照片的路径显示在对白而不是图像本身。将路径保存到firebase并将图像本身检索到另一个活动的imageview中。
请问有哪些示例代码?
答案 0 :(得分:0)
我想通过点击按钮添加图片,然后从我的图库中选择图片。
使用选择器从图库中选择图像:
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);
}
我希望照片的路径显示在对白而不是图像本身。将路径保存到firebase并将图像本身检索到另一个活动的imageview中。
通过使用选择器,您可以从OnActivityResult
:
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
}
要在Firebase中存储图像的路径,您需要使用以下代码将内容网址转换为文件的实际路径:
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);
}