我想从网络服务获取json,显示进度圆并处理它,然后显示数据。如何在没有jdts和加载圈的情况下使异步调用同步?任何库或其他任何东西?
例如
....some code
call to json webservice //wait for http call to execute while displaying loading circle
update the UI
答案 0 :(得分:0)
嗯,一个解决方案是使用ProgressDialog,另一个是ProgressBar, ProgressDialog发送带有此进度圈的Dialog。
对于ProgressDialog,你应该知道:progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Downloading JSON ...");
progressDialog.setMessage("Download in progress ...");
progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);//horizontal
progressDialog.setProgressStyle(progressDialog.STYLE_SPINNER); //Circular
progressDialog.setProgress(0);
progressDialog.setMax(20); // the progress has 20 steps
progressDialog.setIndeterminate(true);// infinite loop in the progress
progressDialog.show();
对于AsyncTask你应该知道:
doInBackground()有异步进程的源代码。
onProgressUpdate()有源代码,您可以向主线程发送一些包含UI的东西。因为它的工作原理你应该在doInBackground()方法中使用publishProgress()。
onPostExecute()此方法将在doInBackground完成所有进程后执行
onPreExecute()此方法用于初始化asynctask中所需的所有内容
您可以在Activity的开头声明并实例化ProgressDialog,然后在 onPreExecute()
中的AsyncTask中设置 progressDialog.show() private class JsonWebService extends AsyncTask<URL, Integer, JSONObject> {
protected void onPreExecute(){
progressDialog.show();
}
protected JSONObject doInBackground(URL... urls) {
//here all your code for download your JSON
//
//publishProgress(counter);
return json;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(JSONObject result) {
//use your JSON as you want your download is finished
// close your progressdialog
progressDialog.dismiss();
}
}