@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
initUI();
}
private void initUI() {
setContentView(R.layout.activity_login);
setTitle(R.string.text_login);
}
@Override
public void onRequestStart(int requestId) {//onRequestStart
//此处可以显示Dialog
}
@Override
public void onRequestSuccess(int requestId, int statusCode, Result> result) { //onRequestSuccess
Log.i(TAG,result.getMessage()+"–"+result.getStatus()+"–"+result.getData());//数据打印
}
@Override
public void onRequestError(int requestId, Throwable error) { //onRequestError
Log.e(TAG,error.getMessage());//请求失败,错误信息打印
}
}
有没有感觉还是挺简便的赶脚?说了那么多,下面我们来进一步配合代码进行了解。
之前博文介绍过,使用该框架两种方式:
第一种 是将 releases 包中的最新jar拷贝到应用的 libs 目录下
第二种 是将 library 里的项目源码拷贝到你应用的 src 目录下(这里采用的是第二种方式)
以下是AsyncHttpClient简单用法,即创建一个请求
AsyncHttpClient client = new AsyncHttpClient();
client.get(“http://www.google.com”, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
注:该框架可执行多种网络请求,包括 get、put、post、head、delete 。有关不同请求的介绍,大家不了解的可以去查阅资料了解相关差异,这里就不介绍了。
我们就是对 AsyncHttpClient类进行了处理,上面执行请求时有出现这两行代码:
GenericDataManager mDataManager = GenericDataManager.getInstance();//通用网络管理类
mDataManager.dataRequest(0,Constants.REQUEST.GET, RequestURL.URL_LOGIN, mParams,new ResultParser(), this);//执行网络请求
GenericDataManager是什么玩意呢?
这个类是封装的一个通用数据请求类,下面给出这个类,结合注释大家可以了解学习:
package org.gaochun.android.http.manager;
import java.io.File;
import org.apache.http.Header;
import org.gaochun.android.http.AsyncHttpClient;
import org.gaochun.android.http.RequestParams;
import org.gaochun.android.http.network.IRequestCallback;
import org.gaochun.android.http.network.RequestCallBack;
import org.gaochun.model.Result;
import org.gaochun.parser.AbstractParser;
import org.gaochun.utils.Log;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
public class GenericDataManager {
private static final String TAG = GenericDataManager.class.getSimpleName();
private static GenericDataManager sInstance;
private final String mServerHost; //服务器地址前缀
private final Handler mHandler; //执行异步回调的Handler
private static AsyncHttpClient client; //AsyncHttpClient对象
// 设置超时时间
static{
client = new AsyncHttpClient(); //初始化AsyncHttpClient对象
client.setTimeout(6 * 1000
); //设置超时时间(重要)
}
//单例
public static GenericDataManager getInstance() {
if (sInstance == null) {
Log.e(TAG, “ConfigManager.initiate method not called in the application.”);
} // else ignored.
return sInstance;
}
//需要在Application中初始化
public static void initialize(Context applicationContext, String serverHost) {
sInstance = new GenericDataManager(applicationContext, serverHost);
}
private GenericDataManager(Context applicationContext, String serverHost) {
// 初始化Handler,用于在主线程中执行任务
mHandler = new Handler(Looper.getMainLooper());
// 初始化服务器地址
mServerHost = serverHost;
}
private RequestCallBack mRequestCallBack; //该抽象类继承了AsyncHttpResponseHandler,并重写了回调方法
public void dataRequest(final int requestId,String requestType,String urlString,RequestParams mParams,
final AbstractParser mParser,final IRequestCallback mCallback){
Log.i(TAG,“url:—>”+mServerHost + File.separator + urlString);
//请求数据开始之前的回调
if (mCallback != null) {
mHandler.post(new Runnable() {
@Override
public void run() {
mCallback.onRequestStart(requestId);
}
});
} // else ignored
//实例化回调对象
mRequestCallBack = new RequestCallBack() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String data = new String(responseBody); //获取数据结果
//Log.d(TAG,“服务器获取数据:”+data);
final Result result = mParser.parse(data); //解析类
if (result != null) {
//return the requestId + statusCode + result
mCallback.onRequestSuccess(requestId,statusCode,result); //返回请求成功且解析完成的数据回调
} // else ignored.
}
@Override
public void onStart() {
if (mCallback != null) {
mCallback.onRequestStart(requestId);
} // else ignored
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
if (mCallback != null) {
mCallback.onRequestError(requestId,error);
} // else ignored
}
};
//根据传入的 requestType 来switch具体的请求方式(注:JDK1.7中switch()支持字符串常量)
switch (requestType) {
case Constants.REQUEST.GET:
rt() {
if (mCallback != null) {
mCallback.onRequestStart(requestId);
} // else ignored
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
if (mCallback != null) {
mCallback.onRequestError(requestId,error);
} // else ignored
}
};
//根据传入的 requestType 来switch具体的请求方式(注:JDK1.7中switch()支持字符串常量)
switch (requestType) {
case Constants.REQUEST.GET:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)