【发布时间】:2021-02-02 23:38:28
【问题描述】:
我有一个小的 png 图像,我喜欢使用 Xamarin.Android 在 imageview 中显示。 我正在使用以下代码下载文件:
private void Download()
{
var url = "https://hns.d7u.de/v4/images/hvvstoerungen_facebook.png";
var directory = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/myapp/";
var fileName = url.Substring(url.LastIndexOf("/") +1);
var path = directory + fileName;
System.Net.WebClient wC = new System.Net.WebClient();
wC.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip");
wC.DownloadDataCompleted += WC_DownloadDataCompleted;
wC.DownloadDataAsync(new Uri(url), path);
}
private void WC_DownloadDataCompleted(object sender, System.Net.DownloadDataCompletedEventArgs e)
{
var path = e.UserState.ToString();
var bytes = e.Result;
if (File.Exists(path))
File.Delete(path);
if (!File.Exists(path))
File.WriteAllBytes(path, bytes);
}
它存储在 /data/user/0/myapp/files/hns/hvvstoerungen_facebook.png 并且 File.Exists(...) 为该路径返回 true。所以我确定该文件已下载并且存在。
当我想在 ImageView 中显示它时,我会这样做:
if (System.IO.File.Exists(imageFilePath))
{
Android.Net.Uri andrUri = Android.Net.Uri.Parse(imageFilePath);
ImageIcon.SetImageURI(andrUri);
//Also not working:
//Bitmap bitmap = BitmapFactory.DecodeFile(imageFilePath);
//ImageIcon.SetImageBitmap(bitmap);
//And also not working:
//Android.Net.Uri andrUri = Android.Net.Uri.Parse(imageFilePath);
//Bitmap bmp = BitmapFactory.DecodeStream(Android.App.Application.Context.ContentResolver.OpenInputStream(andrUri));
//ImageIcon.SetImageBitmap(bmp);
}
当应该显示图像时,输出窗口会显示以下内容:
02-01 23:41:24.770 E/Drawable(19815):无法解码流: android.graphics.ImageDecoder$DecodeException:创建图像失败 带有消息“未实现”输入的解码器包含错误。 02-01 23:41:24.770 W/ImageView(19815):resolveUri 在错误的位图 uri 上失败: /data/user/0/myapp/files/hns/hvvstoerungen_facebook.png
但我无法弄清楚这到底意味着什么。 另外一件事是:如果我在全新的 Android Emulator 实例中运行应用程序,则不会显示此图像和所有其他类型的图像。 如果我在旧的 Android Emulator 实例中运行该应用程序,该应用程序之前已经在 Android.Forms 基础上运行,则会显示旧项目已知的旧图像,而新下载的图像则不显示。所有图片都在同一个文件夹中,我看不出它们之间有什么区别。
有人有想法吗?
编辑: 我的工作版本有以下 Download() 方法:
private void Download()
{
var noCompression = new string[] { ".png", ".jpg", ".jpeg", ".gif", ".zip", ".7z", ".mp3", ".mp4" };
var url = "https://hns.d7u.de/v4/images/hvvstoerungen_facebook.png";
var directory = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/myapp/";
var fileName = url.Substring(url.LastIndexOf("/") +1);
var path = directory + fileName;
System.Net.WebClient wC = new System.Net.WebClient();
if (!noCompression.Contains(url.Substring(url.LastIndexOf('.'))))
wC.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip");
wC.DownloadDataCompleted += WC_DownloadDataCompleted;
wC.DownloadDataAsync(new Uri(url), path);
}
【问题讨论】:
-
注意:问题出在这一行:
wC.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip");。如果我删除它,图像显示没有任何问题。
标签: xamarin.android