上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一),第1张

上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

@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:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存