このアクティビティの開始時にローカルURIから画像を表示しようとしています。Xamarin.Android - エンコードされた文字列を解析した後、「不良ビットマップURIで解決URIが失敗しました」
ユーザが画像を選択し、OnActivityResult()
メソッドをトリガします。私は最初のURIを取得する場合、それは問題なく画像が表示されます。
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == IMG_REQUEST_CODE && resultCode == Result.Ok)
{
Android.Net.Uri imageUri = null;
if (data != null)
{
imageUri = data.Data;
userPreferences.BackgroundImageURI = imageUri.ToString();
imgView.SetImageURI(imageUri);
imgView.Visibility = ViewStates.Visible;
}
}
}
あなたが見ることができるように、私はuserPreferences
でエンコードされた文字列としてURIを格納しています。これはデバイスに保存され、問題なくロードできます。この場合、文字列はcontent://com.android.providers.media.documents/document/image%3A38
であり、(共有設定を使用して)メモリからロードすると同じです。
コード化されたURI文字列を読み込み、文字列を解析してURIを作成し、その画像を表示するためにURIをimgView
に設定するコードです。
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Preferences);
userPreferences = Helpers.LoadUserPreferences(this, new Shared.Model.UserPreferences());
imgView = FindViewById<ImageView>(Resource.Id.imgView);
if (!string.IsNullOrWhiteSpace(userPreferences.BackgroundImageURI))
{
var imgURI = Android.Net.Uri.Parse(userPreferences.BackgroundImageURI);
imgView.SetImageURI(imgURI);
imgView.Visibility = ViewStates.Visible;
}
else
{
imgView.Visibility = ViewStates.Invisible;
}
}
それはSetView(imgUri)
ラインになると、私はこの出力を受け取る:resolveUri failed on bad bitmap uri: content://com.android.providers.media.documents/document/image%3A38
私も無駄にURIをハードコーディング試してみました。主な不満は、コードが同じで、2つの異なるシナリオで実行されていることです。アクティビティのライフサイクルと関係している可能性はありますか?それとも私はもっと大きなものを逃したのですか?私はURIから画像のため実際のパスを取得するクラスを持つ代替として
if (!string.IsNullOrWhiteSpace(userPreferences.BackgroundImageURI))
{
var imgURI = Android.Net.Uri.Parse(userPreferences.BackgroundImageURI);
var input = Activity.ContentResolver.OpenInputStream(imgURI);
imgView.SetImageBitmap(BitmapFactory.DecodeStream(input));
imgView.Visibility = ViewStates.Visible;
}
else
{
imgView.Visibility = ViewStates.Invisible;
}
:
OnActivityResultに来た画像がギャラリーからでしょうか? – jzeferino
@jzeferinoそれは正しいです。 –