`
sw1982
  • 浏览: 511202 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android 异步网络请求及协调CountDownLatch

阅读更多

1.框架

loopj.com/android-async-http/

 

2.使用: 

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

 注意坑:client推荐使用单例,但是不要随便放在class的static里面, 一定要放到application类里面。 否则切出应用2分钟后回来,请求失败了啊。

 

3.返回处理(以json为例,结合gson直接拿到返回对象)

 new AsyncHttpResponseHandler() {
					public void onSuccess(String response) {
						UserInfoResp resp = new Gson().fromJson(response,
								UserInfoResp.class);
						} else {
							// 报错
							progress.CloseProgress();
							Toast.makeText(LoginActicity.this, resp.errMsg,
									Toast.LENGTH_SHORT).show();
						}
					}

					@Override
					public void onFailure(int statusCode, Header[] headers,
							byte[] responseBody, Throwable error) {
						onFailurePrint(statusCode, headers, responseBody, error);
					}
				});
				
	/**
	 * 请求onFailur时候的错误打印模版
	 */
	public static void onFailurePrint(int statusCode,Header[] headers,
			byte[] responseBody, Throwable error){
		if(error!=null){
			Log.e("ossclient", "statusCode="+statusCode,error);
		}else{
			Log.e("ossclient", "statusCode="+statusCode+" without Exception");
		}
		if (responseBody!=null) {
			try {
				Log.e("ossclient", new String(responseBody, "UTF-8"));
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}		

 

4. 批量图片上传; 如果需要等待全部结果的返回,可以使用 CountDownLatch

http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html

 

原以为安卓里面没有这种java特性,于是自己写了老半天,主要是两个坑:

1.、 计数对象必须加volatile   private volatile int count_OK = 0;

2、 需单独开线程来循环计数,如果主线程做循环计数,while会导致无法处理response。

 

			//等待全部上传ok再提交后台
			new Thread(){public void run(){
				while(count_OK < size_ALL){
					try {
						sleep(200);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				System.out.println("haha");
				addPics();	
			}}.start();	

 

分享到:
评论

相关推荐

    利用 CountDownLatch 类实现线程同步

    1. **初始化异步操作**:在 Activity 或 Fragment 的生命周期方法中,如果需要先执行一系列异步操作(如网络请求、数据库初始化等)再显示界面,可以使用 `CountDownLatch` 来等待这些异步操作完成。 2. **并发测试...

    android核心技术与实例详解口袋微博项目源码

    5. **网络编程**:使用HttpURLConnection、OkHttp或者Retrofit等库进行网络请求,处理JSON数据,实现与服务器的交互。本例中涉及的服务器端源码可能涵盖了RESTful API的设计和实现。 6. **异步处理**:Android中的...

    Android之快速框架+多线程下载框架的技术(Android + Afinal+gson)_android源码.zip

    - **网络请求**:Afinal内置了HttpClient,支持异步和同步网络请求,可以方便地进行JSON或XML数据的解析。 3. **多线程下载框架**: - **多线程下载**:为了提高下载效率,通常会采用多线程的方式。每个线程负责...

    android面试题(带算法程序)

    4. **网络编程**:HTTP/HTTPS请求的处理,如使用OkHttp、Volley库,理解网络请求的异步处理,以及JSON解析(Gson、Jackson、Fastjson等)。 5. **数据结构与算法**:面试中常见的算法题可能包括数组、链表、栈、...

    Android文件下载Demo(可断点续传)

    同时,由于Android 6.0及以上版本引入了运行时权限,所以进行文件读写和网络访问时,需要动态获取相应的权限。 8. **线程同步与通信**: 在多线程环境下,线程间的同步和通信是必不可少的。Android提供了`Handler`...

    Android多线程下载Demo

    Volley和OkHttp都是强大的网络请求库,它们支持异步请求和多线程处理,但Volley更倾向于轻量级的HTTP请求,对于大文件下载可能不够高效。OkHttp则提供了更为底层的控制,可以方便地实现多线程下载。开发者可以通过...

    Android 线程同步Demo

    6. **Volley库**:Google提供的网络请求库,内部实现了线程池和请求队列,可以高效地处理网络请求并同步数据。 在`MyApplication`这个项目中,开发者可能通过上述一种或多种方式实现线程同步,以保证应用的稳定运行...

    Android知识系统全面总结+j精通android

    7. **权限管理**:理解Android的运行时权限机制,如何在API 23及以上版本请求权限。 8. **Android组件间通信**:熟练掌握Intent的使用,理解如何通过Intent进行组件间的通信,包括隐式启动和显式启动。 9. **碎片...

    [毕设季 android开发]第六讲:Android线程及UI更新

    然而,执行耗时的操作(如网络请求、数据库操作或大量计算)直接在主线程上会阻塞UI,导致应用无响应(ANR)。因此,理解和掌握如何在Android中正确使用线程以及如何更新UI是非常基础且关键的知识。 本讲将深入探讨...

    Android面试大全.zip

    8. **权限管理**:Android 6.0及以上版本的运行时权限管理,以及如何处理权限请求。 9. **组件通信**:了解如何在组件之间传递数据,如Intent的Extra、Binder机制和AIDL。 10. **Android架构组件**:ViewModel、...

    Android面试宝典.doc

    - Retrofit:优雅的网络请求框架。 - JSON解析:Gson、Jackson或Fastjson的使用。 - WebSocket:实时通信协议实现。 7. **数据库操作** - SQLite:基本操作、事务处理、SQL优化。 - Room Persistence Library...

    android 学习路线大纲

    - Ajax:了解异步请求,使用XMLHttpRequest进行页面局部更新。 - DOM操作:使用DOM API进行HTML文档的增删改查。 - JSON:处理JSON数据,进行数据交换。 7. **Android基础** - 安卓环境搭建:安装SDK,配置...

    android多线程管理

    **工作线程**:也称为后台线程,用于执行耗时任务,如网络请求、数据库操作、大数据计算等,以保证主线程的流畅运行。 ### 2. 创建工作线程 #### 2.1 Handler-Looper-Message机制 通过创建`Handler`、`Looper`和`...

    百度Android工程师面试题.zip

    HTTP/HTTPS协议,OkHttp、Retrofit等网络库的使用,以及如何处理网络请求的异步和同步问题,都是面试中不可或缺的部分。理解Android的网络权限管理,如Manifest文件中的INTERNET权限,也是必要的。 7. 性能优化: ...

    Android多线程操作

    如果在主线程中执行耗时操作,如网络请求、数据库操作或大量计算,会导致应用程序无响应(ANR),严重影响用户体验。因此,我们需要在Android中创建和管理多线程来解决这个问题。 一、线程类型 1. **标准Java线程**...

    Android开发(个人整理01) 线程Demo源码

    这三者是Android异步消息处理的核心组件。Handler在主线程中创建,用于接收和处理由其他线程(如工作线程)发送的消息;Looper是消息循环器,确保消息能被正确分发;Message是承载数据的对象。通过这种方式,可以在...

    android 多线程文件断点下载

    1. **异步更新**:使用Handler或Android的AsyncTask更新UI,确保在主线程中执行,防止UI卡顿。 2. **进度显示**:实时更新每个线程的下载进度,并汇总显示整体进度,可以使用ProgressDialog或ProgressBar组件。 综...

    android实例源码

    10. **权限管理**: Android运行时权限模型,如何在API 23及以上版本请求用户权限。 11. **网络编程**: 使用HttpURLConnection、OkHttp或Retrofit进行网络请求,获取和解析JSON数据。 12. **图片加载库**:如Glide...

    Android多线程下载实现方案

    在实际项目中,我们通常使用第三方库如`OkHttp`进行网络请求,它提供了高效的异步接口: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); ...

    Android多文件断点续传

    这可能涉及到并发控制和同步策略,例如使用`Semaphore`或`CountDownLatch`来协调多个任务。 在存储进度信息时,数据库(如SQLite)是一个不错的选择,因为它可以提供持久化的存储,并支持复杂的查询和更新操作。每...

Global site tag (gtag.js) - Google Analytics