AndroidJavaHTTP网络通信架构设计Word文档下载推荐.docx
《AndroidJavaHTTP网络通信架构设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AndroidJavaHTTP网络通信架构设计Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
16
17
18
董秘android端技术交接文档
1前言
该文档为AndroidJava网络通信框架设计。
1.1文档目的
文档编写目的:
为项目参与者阅读。
比较适用于Android开发APP的网络框架的搭建。
2依赖库Xutils
在build.gradle文件中,添加依赖库:
api'
org.xutils:
xutils:
3.8.2'
3框架类
涉及到的类有:
XutilsManager:
接口管理类,依赖xutils和部分工具。
XutilsCallBackListener回调类:
处理response的回调的数据
直接上代码,大家可以直接拷贝代码。
3.1XutilsManager接口管理类
packagecom.******.******.http;
importandroid.app.Application;
importandroid.content.Context;
importandroid.text.TextUtils;
importcom.******.******.model.RequestBean;
importcom.******.******.model.RspHeadBean;
importcom.******.******.manager.AccountManager;
importcom.******.******.utils.DebugLog;
importcom.******.******.utils.GsonUtil;
importcom.******.******.utils.NetUtil;
importcom.google.gson.Gson;
importmon.Callback;
importorg.xutils.http.RequestParams;
importorg.xutils.http.cookie.DbCookieStore;
importorg.xutils.x;
importjava.util.ArrayList;
publicclassXutilsManager{
publicstaticfinalStringTAG=XutilsManager.class.getSimpleName();
privateContextmContext;
publicstaticArrayList<
XutilsHistoryBean>
xutilsHistoryBeans=newArrayList<
>
();
publicstaticvoidaddXutilsHistoty(Stringtag,Stringreq,longtime){
XutilsHistoryBeanbean=newXutilsHistoryBean();
bean.tag=tag;
bean.req=req;
bean.rsp="
unkowm"
;
bean.reqTime=time;
xutilsHistoryBeans.add(bean);
if(xutilsHistoryBeans.size()>
100){
xutilsHistoryBeans.remove(0);
}
publicstaticvoidupdateRsp(longreqTime,Stringrsp,longrspTime){
for(XutilsHistoryBeanitem:
xutilsHistoryBeans){
if(item.reqTime==reqTime){
item.rsp=rsp;
item.rspTime=rspTime;
break;
privatestaticXutilsManagerinstance;
publicstaticXutilsManagergetInstance(Contextcontext){
if(instance==null){
synchronized(XutilsManager.class){
instance=newXutilsManager();
instance.mContext=context;
returninstance;
privateXutilsManager(){
/**
*初始化Xutils。
*@paramapplication
*/
publicvoidinitXutils(Applicationapplication){
x.Ext.init(application);
x.Ext.setDebug(true);
XutilsConfig.initUrlMap();
DebugLog.d(TAG,"
SERVER_ADDR:
"
+XutilsConfig.SERVER_ADDR);
publicvoidxutilsPost(RequestBeanreq,Stringtag,inttype,XutilsCallBackListenerlistener){
Stringurl=XutilsConfig.getUrl(tag);
if(!
NetUtil.isNetWorkConnected(mContext)){
DebugLog.e(TAG,"
网络未连接,取消xutilsPosturl:
+url);
网络未连接,取消xutilsPosttag:
+tag);
listener.callbackListener(newRspEntity(false,"
网络未连接"
type,req.pageIndex));
}elseif(AccountManager.getInstance().isLogin()||XutilsConfig.login_TYPE==type){
DebugLog.w(TAG,"
xutilsPostReq-->
url:
RequestParamsparams=newRequestParams(url);
longtime=System.currentTimeMillis();
if(req!
=null){
params.setAsJsonContent(true);
StringjsonStr=GsonUtil.toJsonString(req);
tag:
+tag+"
&
&
str:
+jsonStr);
addXutilsHistoty(tag,jsonStr,time);
params.setBodyContent(jsonStr);
xutilsPost(listener,params,tag,type,req.pageIndex,time);
}else{
未登录,取消xutilsPosturl:
未登录,取消xutilsPosttag:
未登录"
publicvoidxutilsPost(Stringurl,StringjsonStr,inttype,XutilsCallBackListenerlistener){
}elseif(AccountManager.getInstance().isLogin()){
TextUtils.isEmpty(jsonStr)){
xutilsPost(listener,params,null,type,0,time);
privatebooleancheckCookie(inttype){
if(type==XutilsConfig.login_TYPE){
returntrue;
returnAccountManager.getInstance().checkCookie();
privatevoidxutilsPost(XutilsCallBackListenerlistener,RequestParamsparams,Stringtag,inttype,finalintpageIndex,finallongtime){
//if(!
checkCookie(type)){
//ToastUtil.showToast("
Cookie失效,请重新登录"
);
//AccountManager.getInstance().enterLoginActivity();
//return;
//}
x.http().post(params,newCallback.CommonCallback<
String>
(){
@Override
publicvoidonSuccess(Stringresult){
Gsongson=newGson();
RspHeadBeanrspHeadBean=null;
booleansuccess=false;
Stringcontent="
"
try{
rspHeadBean=gson.fromJson(result,RspHeadBean.class);
if(rspHeadBean!
success=(rspHeadBean.ret==0);
if(TextUtils.isEmpty(rspHeadBean.ErrorMsg)){
rspHeadBean.ErrorMsg="
+rspHeadBean.ret;
content=(rspHeadBean.ret==0)?
rspHeadBean.content:
rspHeadBean.ErrorMsg;
xutilsPostRsp-->
ret:
+rspHeadBean.ret+"
+content);
updateRsp(time,content,System.currentTimeMillis());
if(rspHeadBean.ret==ErrorConfig.ACCOUT_ERROR_OTHER_LOGINED){//该账号已在别处登录
AccountManager.getInstance().enterLoginActivity();
content="
}catch(Exceptione){
content=e.getMessage();
listener.callbackListener(newRspEntity(success,content,type,pageIndex));
if(type==XutilsConfig.login_TYPE&
success){
DbCookieStoredbCookieStore=DbCookieStore.INSTANCE;
AccountManager.getInstance().setCookieMap(dbCookieStore.getCookies());
publicvoidonError(Throwableex,booleanisOnCallback){
listener.callbackListener(newRspEntity(false,ex.toString(),type,pageIndex));
publicvoidonCancelled(CancelledExceptioncex){
listener.callbackListener(newRspEntity(false,cex.toString(),type,pageIndex));
publicvoidonFinished(){
});
}
3.2XutilsCallBackListener回调类
publicinterfaceXutilsCallBackListener{
publicvoidcallbackListener(RspEntityrspEntity);
3.3RequestBean为Request请求基类
packagecom.******.******.model;
publicclassRequestBean{
publicintpageIndex;
所有的请求,都是继承自这个类:
3.4RspHeadBean类
importcom.google.gson.annotations.SerializedName;
publicclassRspHeadBean{
@SerializedName("
cost"
)
publicintcost;
ret"
publicintret;
content"
publicStringcontent;
ErrorMsg"
publicStringErrorMsg;
3.5RspEntity类
publicclassRspEntity{
publicbooleansuccess;
publicintentityType;
//已经获取的数据的页数;
0表示首页数据。
publicStringrspString;
publicRspEntity(booleansuccess,StringrspString,intentityType,intpageIndex){
this.success=success;
this.rspString=rspString;
this.entityType=entityType;
this.pageIndex=pageIndex;
rspString即response的关键数据
3.6request请求举例
//设置--获取升级信息
publicstaticvoiddoUpgradeApp(XutilsCallBackListenerlistener){
DebugLog.i(XutilsManager.TAG,"
----(设置--获取升级信息)----"
Contextcontext=ComSecretaryApplication.getInstance().getContext();
UpgradeReqreq=newUpgradeReq();
req.iCheckFreq=1;
req.sClientMd5=DeviceUtil.MD5;
req.stXPTerminalInfo=newXPTerminalInfo();
req.stXPTerminalInfo.iTerminalType=1;
//0-web1-app2-离线端
req.stXPTerminalInfo.iSubType=1;
//1-andriod2-ios(iTerminalType=1时填)
Stringversion=DeviceUtil.getVersionCode(context)+"
req.stXPTerminalInfo.sVersion=version;
req.stXPTerminalInfo.sDUA="
SN=ADRCJPH_GA&
VN="
+version+"
BN=0&
RL=1920_1080&
OS=144_6.1.7601&
DV=V1"
XutilsManager.getInstance(context).xutilsPost(req,XutilsConfig.doUpgradeApp_TAG,XutilsConfig.doUpgradeApp_TYPE,listener);
3.7response回执举例
XutilsInterface.doUpgradeApp((rspEntity)->
{
if(rspEntity.success){
UpgradeRsprsp=(newGson()).fromJson(rspEntity.rspString,UpgradeRsp.class);
UpgradeInfoupgradeInfo=rsp.stUpgradeInfo;
AccountManager.getInstance().setUpgradeInfo(upgradeInfo);
BooleanforceFlag=upgradeInfo.iStatus==2;
notifyUpdateVersion(upgradeInfo,forceFlag);
//ToastUtil.showToast(rspEntity.rspString);
});
4赠送工具类
4.1DebugLog
packagecom.******.******.utils;
importandroid.util.Log;
importcom.******.******.main.AppConfig;
importcom.******.******.ui.widget.BaseActivity;
publicclassDebugLog{
privatestaticbooleanDEBUG=AppConfig.DEBUG;
publicstaticvoidd(Stringtag,Stringmsg){
if(DEBUG)Log.d(tag,msg);
publicstaticvoidi(Stringtag,Stringmsg){
if(DEBUG)Log.i(tag,msg);
publicstaticvoidv(Stringtag,Stringmsg){
if(DEBUG)Log.v(tag,msg);
publicstaticvoidw(Stringtag,Stringmsg){
if(DEBUG)Log.w(tag,msg);
publicstaticvoide(Stringtag,Stringmsg){
Log.e(tag,msg);
publicstaticvoida(Stringtag,Stringmsg){
if(DEBUG){
Log.d(tag,msg);
ToastUtil.showToast("
TAG:
-->
Msg:
+msg);
publicstaticvoidd(Objectobject,Stringmsg){
d(object.getClass().getSimpleName(),msg);
publicstaticvoidi(Objectobject,Stringmsg){
i(object.getClass().getSimpleName(),msg);
publicstaticvoidv(Objectobject,Stringmsg){
v(object.getClass().getSimpleName(),msg);