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

本文介绍了上门洗车APP的Android客户端开发中网络框架的封装,包括数据请求、参数、回调接口的使用。使用了AsyncHttpClient库,封装了GET和POST请求,通过AbstractParser解析数据,并通过IRequestCallback接口处理回调。文章强调了新技术的学习态度和如何高效利用有限时间理解新技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

/**

  • @author gao_chun

  • 通用数据通讯类,不涉及认证与授权的数据。

  • 这个类的任务:通过相应参数,获取数据对象。

  • 这个类不会涉及到URL地址。

*/

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;

}

/**

  • 该方法封装了网络数据请求和数据解析

  • 并传入回调接口

  • @param requestId 请求ID

  • @param requestType 请求类型(此处根据传入的常量只提供了get请求和post请求)

  • @param urlString 请求URL

  • @param mParams 请求参数

  • @param parser 通用数据解析抽象解析器

  • @param mCallback 自定义接口回调

*/

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:

client.get(mServerHost + File.separator + urlString, mParams,mRequestCallBack);

break;

case Constants.REQUEST.POST:

client.post(mServerHost + File.separator + urlString, mParams,mRequestCallBack);

break;

default:

client.get(mServerHost + File.separator + urlString, mParams,mRequestCallBack);

break;

}

}

}

我们需要注意的是该方法中传入的参数,且使用了泛型 :

/**

  • 该方法封装了网络数据请求和数据解析

  • 并传入回调接口

  • @param requestId     请求ID

  • @param requestType   请求类型(此处根据传入的常量只提供了get请求和post请求)

  • @param urlString     请求URL

  • @param mParams       请求参数

  • @param parser        通用数据解析抽象解析器

  • @param mCallback     自定义接口回调

*/

public void dataRequest(final int requestId,String requestType,String urlString,RequestParams mParams,

final AbstractParser mParser,final IRequestCallback mCallback)

将请求参数,请求类型,请求URL,解析器,回调,传入这个方法中进行处理,回调成功直接取数据

如果项目中需要用到头像上传,下载 等功能, Android-async-http  项目中已经提供了对应的方法,大家可以自己在该类中封装方法。

忙里偷闲的挤时间整理了这篇文章,目的是先给大家简单的介绍框架的使用,让感兴趣的朋友有所了解,下篇博文中会给大家详细介绍dataRequest中的抽象解析类 及 请求参数封装 RequestParameterFactory类,当然也需要整理好源码后给大家共享学习。

如果觉得有需要改进的地方或者好的想法,欢迎大家发表意见。

上门洗车APP — Android客户端开发 前言及业务简介

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

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

总结

现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。

我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。

Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。

如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。

Android学习PDF+架构视频+面试文档+源码笔记

(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)

r 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。

Android学习PDF+架构视频+面试文档+源码笔记

(跨平台开发(Flutter)、java基础与原理,自定义view、NDK、架构设计、性能优化、完整商业项目开发等)

[外链图片转存中…(img-oGJ2mKka-1643965933151)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值