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,它位于哪里?

运行时 Xamarin HttpClient 堆栈检测

HttpClient 在 Xamarin / Android 应用程序中不起作用

Xamarin 表单 HttpClient GetAsync

使用 Xamarin 表单的 HttpClient