我有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);
}
感谢您的帮助。
答案 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
是一个虚拟图像,您可以显示该图像,直到图像以异步方式下载。