【发布时间】:2020-08-13 15:51:50
【问题描述】:
我正在尝试使用 C# 在 Xamarin Android 中传递我的图像。在第一个活动中,我使用BitmapFactory.DecodeFile(uri_path);将我的图像路径解码为位图文件。我还使用imgView.SetImageBitmap(BitMap); 设置了该位图图片,然后,我在按钮单击中传递该URI 路径,该按钮将使用intent.PutExtra("path", mCurrentPhotoPath); 将图片引用到下一个活动。在下一个活动中,我想从第一个活动中获取传递路径值。
string path = intent.GetStringExtra("path");
if (path != null)
{
Bitmap bitmap = BitmapFactory.DecodeFile(path);
m_imageView.SetImageBitmap(bitmap);
}
else
{
Toast.MakeText(this, "Your picture empty!", ToastLength.Long).Show();
}
但是,我收到一个带有空异常错误的错误。路径返回 null 并且程序正在崩溃。请帮我!几个小时后我感觉卡住了。有什么帮助吗? 这是我的完整代码:
第一个活动 - 我的 onActivityResult
private Button btnContinue, btnCapture;
private ImageView imgView;
public Bitmap BitMap;
private Android.Net.Uri filePath;
private const int c_TAKE_IMAGE_REQUSET = 72;
private ProgressBar progressBar;
public String mCurrentPhotoPath = null;
public override void OnActivityResult(int requestCode, int resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == c_TAKE_IMAGE_REQUSET &&
resultCode == (int)Result.Ok &&
data != null)
{
filePath = data.Data;
//String mCurrentPhotoPath = null;
try
{
mCurrentPhotoPath = GetRealPathFromURI(filePath);
}
catch (Exception ex)
{
// Failed for some reason.
}
try
{
BitMap = (Bitmap)data.Extras.Get("data");
imgView.SetImageBitmap(BitMap);
BitMap = BitmapFactory.DecodeFile(mCurrentPhotoPath);
System.Diagnostics.Debug.WriteLine("Image path == " + mCurrentPhotoPath);
}
catch (System.IO.IOException ex)
{
System.Console.WriteLine(ex);
}
var bitmap = BitmapFactory.DecodeFile(mCurrentPhotoPath); // decode the path into bitmap
imgView.SetImageBitmap(bitmap);
}
}
private string GetRealPathFromURI(Android.Net.Uri uri)
{
string doc_id = "";
using (var c1 = this.View.Context.ContentResolver.Query(uri, null, null, null, null))
{
c1.MoveToFirst();
string document_id = c1.GetString(0);
doc_id = document_id.Substring(document_id.LastIndexOf(":") + 1);
}
string path = null;
// The projection contains the columns we want to return in our query.
string selection = Android.Provider.MediaStore.Images.Media.InterfaceConsts.Id + " =? ";
using (var cursor = this.View.Context.ContentResolver.Query(Android.Provider.MediaStore.Images.Media.ExternalContentUri, null, selection, new string[] { doc_id }, null))
{
if (cursor == null) return path;
var columnIndex = cursor.GetColumnIndexOrThrow(Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data);
cursor.MoveToFirst();
path = cursor.GetString(columnIndex);
}
return path;
}
}
第二个活动 - onCreate protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Upload);
string path = intent.GetStringExtra("path");
if (path != null)
{
Bitmap bitmap = BitmapFactory.DecodeFile(path);
m_imageView.SetImageBitmap(bitmap);
}
else
{
Toast.MakeText(this, "Your picture empty!", ToastLength.Long).Show();
}
m_upload.Click += M_upload_Click;
}
编辑:我将我的放置字符串额外放在我的按钮中。按钮是 Button Continue,它是对下一个活动的引用
private void btnContinue_Click(object sender, EventArgs e)
{
Busy();
Intent intent = new Intent(Activity, typeof(UploadActivity));
intent.PutExtra("path", mCurrentPhotoPath);
StartActivity(intent);
}
【问题讨论】:
-
我在你的代码中没有看到你调用
PutExtra的任何地方 -
编辑:我把我的 PutExtra 放在我的按钮上。请检查我编辑的问题
标签: c# android xamarin xamarin.android