Android网络请求库android-async-http介绍

Android网络请求库:android-async-http开源框架
之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—android-async-http库。
1. 概念:
这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果。
2. 特征:
(1).处理异步Http请求,并通过匿名内部类处理回调结果
**(2).**Http异步请求均位于非UI线程,不会阻塞UI操作。
(3).通过线程池处理并发请求处理文件上传、下载,响应结果自动打包JSON格式。
3. 相应的核心类的介绍:
(1).AsyncHttpResponseHandler:请求返回处理成功、失败、开始、完成等自定义的消息的类。
(2).BinaryHttpResponseHandler:AsyncHttpResponseHandler的子类。该类是一个字节流返回处理的类。用于处理图片等。
(3).JsonHttpResponseHandler:AsyncHttpResponseHandler的子类。这是一个服务器与客户端之间用Json数据交流时使用的类。客户端请求服务器的参数是Json数据类型的,服务器返回给客户端的数据也是Json数据类型的。
(4).RequestParams:封装参数处理的类。将客户端请求的参数封装在该类中。
(5).AsyncHttpClient:异步客户端请求的类。
(6).SyncHttpClient:同步客户端请求的类。AsyncHttpClient的子类。
注意:HttpUtil这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。需要添加android-async-http-1.4.7.jar文件包。
代码如下:

(1).AsyncJsonUtilGet.java

package com.chengdong.su.util.get; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.widget.Toast; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; /** * 异步请求服务器 * * @author scd * */ public class AsyncJsonUtilGet { private static final String URL = ""; private Context mContext; /** * 构造方法 * * @param mContext */ public AsyncJsonUtilGet(Context mContext) { super(); this.mContext = mContext; } /** * 邮箱注册 */ public void emailRegister(String email, String password, String username) { RequestParams params = new RequestParams(); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("email", email); jsonObject.put("password", password); jsonObject.put("username", username); } catch (JSONException e) { e.printStackTrace(); } params.put("jsonObject", jsonObject); // get请求方式 HttpUtil.get(URL, params, new JsonHttpResponseHandler() { @Override public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, errorResponse); Toast.makeText(mContext, "Register failed!", Toast.LENGTH_SHORT) .show(); } @Override public void onSuccess(int statusCode, Header[] headers, JSONObject response) { String errorCode = response.optString("ErrorCode"); // 表示请求成功 if (errorCode.equals("0")) { Toast.makeText(mContext, "注册成功", Toast.LENGTH_LONG).show(); // response:返回的数据都在这个参数中,根据业务要求进行实现功能 } else { super.onSuccess(statusCode, headers, response); } } }); } }

(2).HttpUtil.java工具类:注:需要添加jar包

package com.chengdong.su.util.get; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; import java.util.Set; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.BinaryHttpResponseHandler; import com.loopj.android.http.JsonHttpResponseHandler; import com.loopj.android.http.RequestParams; public class HttpUtil { public static final String STATUS_NETWORK = "network_available"; private static AsyncHttpClient client = new AsyncHttpClient(); static { client.setTimeout(11000); } public static void get(String urlString, AsyncHttpResponseHandler res) { client.get(urlString, res); } public static void get(String urlString, RequestParams params, AsyncHttpResponseHandler res) { client.get(urlString, params, res); } public static void get(String urlString, JsonHttpResponseHandler res) { client.get(urlString, res); } public static void get(String urlString, RequestParams params, JsonHttpResponseHandler res) { client.get(urlString, params, res); } public static void get(String uString, BinaryHttpResponseHandler bHandler) { client.get(uString, bHandler); } public static AsyncHttpClient getClient() { return client; } public static boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager .getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; } // 从UrlConnection中获取文件名称 public static String getFileName(String url) { String fileName = null; boolean isOK = false; try { URL myURL = new URL(url); URLConnection conn = myURL.openConnection(); if (conn == null) { return null; } Map<String, List<String>> hf = conn.getHeaderFields(); if (hf == null) { return null; } Set<String> key = hf.keySet(); if (key == null) { return null; } for (String skey : key) { List<String> values = hf.get(skey); for (String value : values) { String result; try { result = value; int location = result.indexOf("filename"); if (location >= 0) { result = result.substring(location + "filename".length()); result = java.net.URLDecoder .decode(result, "utf-8"); result = result.substring(result.indexOf("\"") + 1, result.lastIndexOf("\"")); fileName = result .substring(result.indexOf("=") + 1); isOK = true; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } if (isOK) { break; } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fileName; } }

开源之家介绍:http://open.jb51.net/project/app-framework/android-async-http.html

时间: 2024-10-26 08:11:51

Android网络请求库android-async-http介绍的相关文章

Android网络请求库android-async-http介绍_Android

Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式-Post的请求方式.今天介绍一个请求服务器的一个开源库-android-async-http库. 1. 概念: 这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果. 2. 特征: (1).处理异步Http请求,并通过匿名内部类处理回调结果 **(2).**Http异步请

android 网络请求库volley方法详解_Android

使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包   volley网络请求步骤:       1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this);       2.创建请求对象(3种)                            StringRequest request = new StringRequest("

android 网络请求库volley方法详解

使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包 volley网络请求步骤: 1. 创建请求队列       RequestQueue queue = Volley.newRequestQueue(this); 2.创建请求对象(3种) StringRequest request = new StringRequest("请求方法","请求的网络地址","成功的网

浅论Android网络请求库——android-async-http

在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库.这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法处理请求结果. 其主要特征如下:处理异步Http请求,并通过匿名内部类处理回调结果,Htt

Android网络请求框架Retrofit详解

介绍: Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求.本文使用Retrofit2.0.0版本进行实例演示. 使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式. 同步请求:需要在子线程中完成,会阻塞主线程. Response response = call.execute().body(); 异步请求:请

关于Android网络请求超时处理

问题描述 关于Android网络请求超时处理 一个请求10秒后无响应怎么做处理,我想在超时后调用缓存数据,但是不知道怎么判断网络超时,项目用了afinal,没找到超时后的处理方法,只有onsuccess和onfailed方法 解决方案 Android Volley网络请求Android使用Volley请求网络Android 异步网络请求及协调CountDownLatch 解决方案二: // 1.设置超时时间 conn.setConnectTimeout(5000);// 设置连接超时时间 //

Android 网络请求框架Volley实例详解

Android 网络请求框架Volley实例详解 首先上效果图 Logcat日志信息on Reponse Volley特别适合数据量不大但是通信频繁的场景,像文件上传下载不适合! 首先第一步 用到的RequetQueue RequestQueue.Java RequestQueue请求队列首先得先说一下,ReuqestQueue是如何对请求进行管理的...RequestQueue是对所有的请求进行保存...然后通过自身的start()方法开启一个CacheDispatcher线程用于缓存调度,开

Android 网络请求详解

我们知道大多数的 Android 应用程序都是通过和服务器进行交互来获取数据的.如果使用 HTTP 协议来发送和接收网络数据,就免不了使用 HttpURLConnection 和 HttpClient,而 Android 中主要提供了上述两种方式来进行 HTTP 操作.并且这两种方式都支持 HTTPS 协议.以流的形式进行上传和下载.配置超时时间.IPv6.以及连接池等功能. 但是 Googl e发布 6.0 版本的时候声明原生剔除 HttpClient,但是笔者认为 HttpClient 会提

Android网络请求框架之Retrofit实践

网络访问框架经过了从使用最原始的AsyncTask构建简单的网络访问框架(甚至不能称为框架),后来使用开源的android-async-http库,再到使用google发布的volley库,一直不懈的寻找更好的解决方案,到现在也没找到,不过据行业所说,Retrofit算是行业比较牛逼的开源请求框架了吧,也算找 到了一些更好的方案,在这里做些记录,也做共享. 下面是我们常用的mvp模式的运行模型: Retrofit:Square提供的开源产品,为Android平台的应用提供一个类型安全的REST客