在显示进度条的同时使异步http调用同步?

时间:2015-04-29 16:27:42

标签: android http asynchronous android-progressbar synchronous

我想从网络服务获取json,显示进度圆并处理它,然后显示数据。如何在没有jdts和加载圈的情况下使异步调用同步?任何库或其他任何东西?

例如

....some code  
call to json webservice //wait for http call to execute while displaying loading circle  
update the UI

1 个答案:

答案 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();
     }
}