HttpClient 在 Xamarin / Android 应用程序中不起作用
Posted
技术标签:
【中文标题】HttpClient 在 Xamarin / Android 应用程序中不起作用【英文标题】:HttpClient not working in Xamarin / Android App 【发布时间】:2015-01-09 07:00:32 【问题描述】:我正在尝试在 Xamarin / android 中创建一个示例应用程序,它从 Internet 下载一张图像并将其显示在 ImageView 中。但在执行var imageContent = await httpClient.GetByteArrayAsync (ImageUrl);
后不久,用户界面/应用程序挂起。没有回叫响应即将到来。我正在添加我的完整源代码供您参考。请帮助我的示例中有什么问题。
[Activity (Label = "ImageDownloadSample", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
private const string ImageUrl = "http://www.olympusimage.com.sg/content/000006422.jpg";
private ImageView imgView;
protected override void OnCreate (Bundle bundle)
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
var button = FindViewById<Button> (Resource.Id.downloadImage);
imgView = FindViewById<ImageView>(Resource.Id.imageView);
button.Click+=((sender, e) =>
DownloadImageAsync());
private async void DownloadImageAsync()
var httpClient = new HttpClient ();
imgView.SetImageResource (Android.Resource.Drawable.IcMenuGallery);
var imageContent = await httpClient.GetByteArrayAsync (ImageUrl);
var documentsPath = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal);
string localFilename = "mytestImage.jpg";
string localPath = System.IO.Path.Combine (documentsPath, localFilename);
File.WriteAllBytes (localPath, imageContent);
var localImage = new Java.IO.File (localFilename);
if (localImage.Exists ())
var bitmapImage = BitmapFactory.DecodeFile (localImage.AbsolutePath);
imgView.SetImageBitmap (bitmapImage);
请帮忙
【问题讨论】:
【参考方案1】:他们有一个示例应用程序可以做到这一点:https://github.com/xamarin/monodroid-samples/blob/master/AsyncImageAndroid/AsyncImageAndroid/MainActivity.cs
另外,您尝试下载的图像看起来非常大...我肯定会得到更合理的东西,只是为了在尝试使事情正常运行时将其排除为错误。
【讨论】:
该示例是使用 WebClient 实现的。我正在尝试使用最新的 HttpClient。为什么我需要坚持旧方法...?? 你可能不知道。您能否更新问题以准确说明您的应用程序挂在哪一行?有没有写到控制台? 您还应该使用较小的图像。我认为您不应该将 8MB 的图片加载到移动应用中。【参考方案2】:我也有同样的问题。检查异常!如果你有超时设置 HttpClient.Timeout 更大!
【讨论】:
【参考方案3】:您可能需要这样设置事件处理程序:
button.Click+=(async (sender, e) => DownloadImageAsync());
表示它包含可以异步运行的代码
【讨论】:
以上是关于HttpClient 在 Xamarin / Android 应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms 使用HttpClient上传文件
Xamarin Native Android HttpClient,它位于哪里?
HttpClient 在 Xamarin / Android 应用程序中不起作用