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

本文详细介绍了Android应用中LoginActivity的实现以及如何配合GenericDataManager进行网络请求,包括使用AsyncHttpClient进行GET和POST请求,以及GenericDataManager的单例模式和数据请求处理流程。
摘要由CSDN通过智能技术生成
  • app.ui.activity.LoginActivity.java

  • TODO: File description or class description.

  • @author: gao_chun

  • @since: 2015-6-23

  • @version: 1.0.0

  • @changeLogs:

  • 1.0.0: First created this class.
    

******************************************************************************/

package org.gaochun.activity;

/**

  • @author gao_chun

*/

public class LoginActivity extends TitleActivity implements IRequestCallback{

public Context context;

@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);

}

});

注:该框架可执行多种网络请求,包括 getputpostheaddelete 。有关不同请求的介绍,大家不了解的可以去查阅资料了解相关差异,这里就不介绍了。

我们就是对 AsyncHttpClient类进行了处理,上面执行请求时有出现这两行代码:

GenericDataManager mDataManager = GenericDataManager.getInstance();//通用网络管理类

mDataManager.dataRequest(0,Constants.REQUEST.GET, RequestURL.URL_LOGIN, mParams,new ResultParser(), this);//执行网络请求

GenericDataManager是什么玩意呢?

这个类是封装的一个通用数据请求类,下面给出这个类,结合注释大家可以了解学习:

/*******************************************************************************

  • Copyright © Weaver Info Tech Co. Ltd

  • DataManager

  • app.backend.manager.DataManager.java

  • 用来访问服务器上的数据

  • @author: gao_chun

  • @since: Jul 23, 2014

  • @version: 1.0.0

  • @changeLogs:

  • 1.0.0: First created this class.
    

******************************************************************************/

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;

/**

  • @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.

}

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值