请求-android 多个Handler问题

问题描述

android 多个Handler问题

新手入门求各位大牛指教。
在做一个应用时,要汇总多个数据库里的数据,因此用了多个Handler请求数据,获取到所有数据后再汇总。现在问题是怎样才能知道所有数据都请求到了?代码如下 :

for (BranchVO m : response.getData()) {
                if(!m.isIsGroup())
                ResponseBusingessEarningData(sDate,m.getBranchID(),URL);
            }

    /*
     * 请求营业统计数据
     */
    private void ResponseBusingessEarningData(String Date,String BranchID,String URL){
        //封装传递参数的集合
        String str="[u4e00-u9fa5]";
        String localDate = Date.replaceAll(str, "-").substring(0,10);
        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        parameters.add(new BasicNameValuePair("Date",localDate));
        parameters.add(new BasicNameValuePair("BranchID",BranchID));
        HttpConnectionUtil.getResponseByPost(URL, "BusinessEarning",parameters, beHandler,(BaseActivity)myContext);
    }

    ResponseHandler beHandler = new ResponseHandler(){

        @Override
        protected void handleResponse(Message msg) {
            String responseText = (String) msg.getData().get("responseText");
            Gson gson = new Gson();
            ApiResultModel<BusinessEarningVO> response = gson.fromJson(responseText,new TypeToken<ApiResultModel<BusinessEarningVO>>(){}.getType());
            if(response.getData() != null && response.getData().size() > 0){
                for (BusinessEarningVO vo : response.getData()) {
                    beList.add(vo);
                }
                beAdapter.notifyDataSetChanged();
            }

            //dismissDialog();
        }

    };

解决方案

CountDownLatch,类似下面这样

CountDownLatch latch=new CountDownLatch( response.getData()的数量)
 for (BranchVO m : response.getData()) {
                if(!m.isIsGroup()){
                  ResponseBusingessEarningData(sDate,m.getBranchID(),URL);
                                    }else{
                                       latch.countDown();//这里,不用获取数据down一次
                                    }
            }

    /*
     * 请求营业统计数据
     */
    private void ResponseBusingessEarningData(String Date,String BranchID,String URL){
        //封装传递参数的集合
        String str="[u4e00-u9fa5]";
        String localDate = Date.replaceAll(str, "-").substring(0,10);
        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        parameters.add(new BasicNameValuePair("Date",localDate));
        parameters.add(new BasicNameValuePair("BranchID",BranchID));
        HttpConnectionUtil.getResponseByPost(URL, "BusinessEarning",parameters, beHandler,(BaseActivity)myContext);
    }

    ResponseHandler beHandler = new ResponseHandler(){

        @Override
        protected void handleResponse(Message msg) {
            String responseText = (String) msg.getData().get("responseText");
            Gson gson = new Gson();
            ApiResultModel<BusinessEarningVO> response = gson.fromJson(responseText,new TypeToken<ApiResultModel<BusinessEarningVO>>(){}.getType());
            if(response.getData() != null && response.getData().size() > 0){
                for (BusinessEarningVO vo : response.getData()) {
                    beList.add(vo);
                }
                beAdapter.notifyDataSetChanged();
            }
            latch.countDown();//这里,完成一个down一次
            //dismissDialog();
        }

    };

解决方案二:

简单来说就是将每个数据库对应的一个变量(自己加),然后初始化为false,处理一个置一个true,并且在置true的下一句可以去判断是否全部置为true了

时间: 2024-09-20 09:37:41

请求-android 多个Handler问题的相关文章

深入探讨Android异步精髓Handler

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。

 1 布局文件, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent&qu

消息-Android中的handler机制

问题描述 Android中的handler机制 请教大神,handler发消息可以从这个activity发送到另外一个activity吗? 解决方案 Handler 变量的定义,一般在一个 Activity 中,想要在两个 Activity 之间通过 Handler 变量,也就是说两个 Activity 都必须能看到此 Handler 变量. 这样的实现方式,就算是能实现,也不好! Activity 之间,还是通过 Receiver,如:BroadcastReceiver 来进行通讯比较好. 解

在Android中使用Handler和Thread线程执行后台操作

大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候 ,我们会为应用程序专门写一个线程去执行这些复杂的数据操作.通过线程,可以执行例如 :数据处理.数据下载等比较耗时的操作,同时对用户的界面不会产生影响.在Android应用 程序开发中,同样会遇到这样的问题.当我们需要访问网络,从网上下载数据并显示在我们 的UI上时,就会启动后台线程去下载数据,下载线程执行完成后将结果返回给主用户界面线 程. 对于线程的控制,我们将介绍一个Handler类,使用该类可以对运行在不同

Android App中用Handler实现ViewPager页面的自动切换_Android

在很多电商网页及app上都有自动切换的商品的推广快,感觉体验挺不错的,正好今天学习使用ViewPager,因此也实现了一个功能类似的demo. 下面是其中的两个截图: 实现一个自动播放功能的ViewPager,要做的主要有以下的几个部分: 实现一个ViewPagerAdapter,用于为ViewPager提供展示内容(例如上面的两张小猫图片) public class ViewPagerAdapter extends PagerAdapter { private List<View> mDat

android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高

问题描述 android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高 xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layo

Android进阶——深入浅出Handler(一)

Android进阶--深入浅出Handler(一) 在学习Handler之前,首先要学习一些基本概念,这将对之后的学习有所帮助. 主线程:Main Thread,又叫UI线程(UI Thread).Android应用执行的线程,所以叫主线程.负责分发事件到合适的UI窗口,也是应用和Android UI套件交互的线程.所以叫UI线程. ANR:应用无响应(application not responding).如果UI线程阻塞超过几秒(现在一般是5秒),用户就会看到应用无响应的Dialog. 下面

Android开发之Handler使用4个例子

Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中. 本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了. 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 复制代码代码如下: packag

Android编程中Handler原理及用法实例分析_Android

本文实例讲述了Android编程中Handler用法.分享给大家供大家参考,具体如下: 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容. 我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个 TextView上面,这时就出现了一个问题,如果这个网络连接的延迟过大,可能是10