热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VolleyProgressDialog在获取大量数据时卡住/冻结

如何解决《VolleyProgressDialog在获取大量数据时卡住/冻结》经验,为你挑选了1个好方法。

这是我的代码:

private void downloadSupplyTownData(final int townId2) {

    /*******************
     * Using Volley
     *******************/
    // Post params to be sent to the server
    HashMap params = new HashMap();
    params.put("ID",townId2);
   CustomDialogClass.showProgressDialog(context,true); 


    JsonObjectRequest req = new JsonObjectRequest(Consts.baseUrl+Consts.townSupplyUrl, new JSONObject(params),
           new Response.Listener() {
               @Override
               public void onResponse(JSONObject response) {
                   try {
                       totalCOnsumerRecords=   Integer.parseInt(response.getString("TotalConsumerRecords").trim());
                       if(totalConsumerRecords>0)
                       {                               
                           /**For -----**/
                           JSONArray dtrArray   =   response.getJSONArray("xxx");
                           for(int i=0;i

这里显示和隐藏ProgressDialog CustomDialogClass.showProgressDialog(context,true);

进度对话框先旋转2-3秒然后卡住.请帮我解决这个问题.

编辑

/***显示Dialog**/@Override protected Dialog onCreateDialog(int id){switch(id){case progress_bar_type://我们将其设置为0 pDialog = new ProgressDialog(this); pDialog.setMessage("正在下载文件.请稍候..."); pDialog.setIndeterminate(假); pDialog.setMax(100); pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pDialog.setCancelable(真); pDialog.show(); 返回pDialog; 默认值:返回null; }}

/**
 * Background Async Task to download file
 * */
class DownloadFileFromURL extends AsyncTask {

    /**
     * Before starting background thread
     * Show Progress Bar Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(progress_bar_type);
    }

    /**
     * Downloading file in background thread
     * */
    @Override
    protected String doInBackground(String... f_url) {
        downloadSupplyTownData(townId);

        return null;
    }

    /**
     * Updating progress bar
     * */
    protected void onProgressUpdate(String... progress) {
        // setting progress percentage
        pDialog.setProgress(Integer.parseInt(progress[0]));
   }

    /**
     * After completing background task
     * Dismiss the progress dialog
     * **/
    @Override
    protected void onPostExecute(String file_url) {            
        dismissDialog(progress_bar_type);

    }

}

从视图中调用AsynchTask new DownloadFileFromURL().execute();



1> ρяσѕρєя K..:

进度对话框先旋转2-3秒然后卡住.

因为解析json响应和downloadConsumerData方法从主UI线程发出api请求.

Volley onResponse网络请求完成时在主UI线程上称为回调方法的方法中.

用于在onResponse方法使用AsyncTask类中解析请求响应并在方法中调用ProgressDialogdismiss方法,该onPostExecute方法将ProgressDialog在Volley请求时关闭,downloadConsumerData在后台线程中完成json数据和方法作业的解析

onResponse方法启动AsyncTask :

  @Override
      public void onResponse(JSONObject response) {
       new DownloadFileFromURL().execute(response);
  }

doInBackground进程JSON数据中:

  @Override
    protected String doInBackground(String... f_url) {
         totalCOnsumerRecords= Integer.parseInt(response.getString
                           ("TotalConsumerRecords").trim());
        // add all code here from onResponse
        downloadSupplyTownData(townId);

        return null;
    }


推荐阅读
author-avatar
崔显莉京_716
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有