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();
相关推荐
1. **初始化异步操作**:在 Activity 或 Fragment 的生命周期方法中,如果需要先执行一系列异步操作(如网络请求、数据库初始化等)再显示界面,可以使用 `CountDownLatch` 来等待这些异步操作完成。 2. **并发测试...
5. **网络编程**:使用HttpURLConnection、OkHttp或者Retrofit等库进行网络请求,处理JSON数据,实现与服务器的交互。本例中涉及的服务器端源码可能涵盖了RESTful API的设计和实现。 6. **异步处理**:Android中的...
- **网络请求**:Afinal内置了HttpClient,支持异步和同步网络请求,可以方便地进行JSON或XML数据的解析。 3. **多线程下载框架**: - **多线程下载**:为了提高下载效率,通常会采用多线程的方式。每个线程负责...
4. **网络编程**:HTTP/HTTPS请求的处理,如使用OkHttp、Volley库,理解网络请求的异步处理,以及JSON解析(Gson、Jackson、Fastjson等)。 5. **数据结构与算法**:面试中常见的算法题可能包括数组、链表、栈、...
同时,由于Android 6.0及以上版本引入了运行时权限,所以进行文件读写和网络访问时,需要动态获取相应的权限。 8. **线程同步与通信**: 在多线程环境下,线程间的同步和通信是必不可少的。Android提供了`Handler`...
Volley和OkHttp都是强大的网络请求库,它们支持异步请求和多线程处理,但Volley更倾向于轻量级的HTTP请求,对于大文件下载可能不够高效。OkHttp则提供了更为底层的控制,可以方便地实现多线程下载。开发者可以通过...
6. **Volley库**:Google提供的网络请求库,内部实现了线程池和请求队列,可以高效地处理网络请求并同步数据。 在`MyApplication`这个项目中,开发者可能通过上述一种或多种方式实现线程同步,以保证应用的稳定运行...
7. **权限管理**:理解Android的运行时权限机制,如何在API 23及以上版本请求权限。 8. **Android组件间通信**:熟练掌握Intent的使用,理解如何通过Intent进行组件间的通信,包括隐式启动和显式启动。 9. **碎片...
然而,执行耗时的操作(如网络请求、数据库操作或大量计算)直接在主线程上会阻塞UI,导致应用无响应(ANR)。因此,理解和掌握如何在Android中正确使用线程以及如何更新UI是非常基础且关键的知识。 本讲将深入探讨...
8. **权限管理**:Android 6.0及以上版本的运行时权限管理,以及如何处理权限请求。 9. **组件通信**:了解如何在组件之间传递数据,如Intent的Extra、Binder机制和AIDL。 10. **Android架构组件**:ViewModel、...
- Retrofit:优雅的网络请求框架。 - JSON解析:Gson、Jackson或Fastjson的使用。 - WebSocket:实时通信协议实现。 7. **数据库操作** - SQLite:基本操作、事务处理、SQL优化。 - Room Persistence Library...
- Ajax:了解异步请求,使用XMLHttpRequest进行页面局部更新。 - DOM操作:使用DOM API进行HTML文档的增删改查。 - JSON:处理JSON数据,进行数据交换。 7. **Android基础** - 安卓环境搭建:安装SDK,配置...
**工作线程**:也称为后台线程,用于执行耗时任务,如网络请求、数据库操作、大数据计算等,以保证主线程的流畅运行。 ### 2. 创建工作线程 #### 2.1 Handler-Looper-Message机制 通过创建`Handler`、`Looper`和`...
HTTP/HTTPS协议,OkHttp、Retrofit等网络库的使用,以及如何处理网络请求的异步和同步问题,都是面试中不可或缺的部分。理解Android的网络权限管理,如Manifest文件中的INTERNET权限,也是必要的。 7. 性能优化: ...
如果在主线程中执行耗时操作,如网络请求、数据库操作或大量计算,会导致应用程序无响应(ANR),严重影响用户体验。因此,我们需要在Android中创建和管理多线程来解决这个问题。 一、线程类型 1. **标准Java线程**...
这三者是Android异步消息处理的核心组件。Handler在主线程中创建,用于接收和处理由其他线程(如工作线程)发送的消息;Looper是消息循环器,确保消息能被正确分发;Message是承载数据的对象。通过这种方式,可以在...
1. **异步更新**:使用Handler或Android的AsyncTask更新UI,确保在主线程中执行,防止UI卡顿。 2. **进度显示**:实时更新每个线程的下载进度,并汇总显示整体进度,可以使用ProgressDialog或ProgressBar组件。 综...
10. **权限管理**: Android运行时权限模型,如何在API 23及以上版本请求用户权限。 11. **网络编程**: 使用HttpURLConnection、OkHttp或Retrofit进行网络请求,获取和解析JSON数据。 12. **图片加载库**:如Glide...
在实际项目中,我们通常使用第三方库如`OkHttp`进行网络请求,它提供了高效的异步接口: ```java OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); ...
这可能涉及到并发控制和同步策略,例如使用`Semaphore`或`CountDownLatch`来协调多个任务。 在存储进度信息时,数据库(如SQLite)是一个不错的选择,因为它可以提供持久化的存储,并支持复杂的查询和更新操作。每...