在Xamarin App(C#)中制作一个装载机

时间:2016-04-27 06:46:03

标签: c# android json xamarin xamarin.android

我有Android应用。

我在.txt文件中实现了JSON的缓存。

但是当我进入类别时,JSON中的文本显示在哪里。屏幕冻结2-3秒并变黑。比活动打开,我看到了我的JSON的所有文本。我认为它已经冻结了,因为我从JSON中的网址下载图片。

我可以制作像装载机一样的东西吗?我将点击一个按钮,看到加载器和json将从文件中读取,然后我看到活动。

我像这样下载并缓存JSON

 string url2 = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=83";
        var json2 = await FetchAsync2(url2);
        var path2 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
        var filename2 = System.IO.Path.Combine(path2, "cache2.txt");
        File.WriteAllText(filename2, json2);
 public async Task<string> FetchAsync(string url)
    {
        string jsonString;

        using (var httpClient = new System.Net.Http.HttpClient())
        {
            var stream = await httpClient.GetStreamAsync(url);
            StreamReader reader = new StreamReader(stream);
            jsonString = reader.ReadToEnd();
        }

        return jsonString;
    }

在目标活动上显示JSON,如下所示

   var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
        var filename = System.IO.Path.Combine(path, "cache4.txt");
        JsonValue readJson;
        var jsonString = File.ReadAllText(filename);
        readJson = JsonObject.Parse(jsonString);
        Console.WriteLine(jsonString);




     private void ParseAndDisplay1(JsonValue readJson)          
     {
            JsonValue firstitem = readJson[0];

            productname.Text = firstitem["post_title"];
            price.Text = firstitem["price"] + "грн";
            weight.Text = firstitem["weight"] + "г";
            var imageBitmap = GetImageBitmapFromUrl1(firstitem["img_url"]);
            imagen.SetImageBitmap(imageBitmap);
      }

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用MonoDroid.UrlImageViewHelper从互联网上异步下载图片:

var img = this.FindViewById<ImageView>(Resource.Id.SomeImageView);
img.SetUrlDrawable("http://example.com/image.png");

答案 1 :(得分:0)

您可以使用ProgressDialog在第一个活动中显示Loaed并获取如下所示的json,

async Task DownLoadData ()
    {

        string url2 = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=83";

        ProgressDialog progress = new ProgressDialog (this, Resource.Style.progress_bar_style);
        progress.Indeterminate = true;
        progress.SetProgressStyle (ProgressDialogStyle.Spinner);
        progress.SetCancelable (false);
        progress.SetContentView (Resource.Layout.ProgressLayout);

        var json2 = await FetchAsync2(url2);
    var path2 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
    var filename2 = System.IO.Path.Combine(path2, "cache2.txt");
    File.WriteAllText(filename2, json2);
  progress.Dismiss ();  
  }

在第二个活动中,您可以使用UrlImageViewHelper Xamarin Component异步加载图像。

您可以添加Xamarin Componentn,然后像下面那样异步加载图像

Koush.UrlImageViewHelper.SetUrlDrawable (imagen, firstitem["img_url"],Resource.Drawable.ic_dummyprofileimage);

其中ic_dummyprofileimage是一个虚拟图像,您可以显示该图像,直到图像以异步方式下载。