【商城开发七】BaseActivity/BaseFragment篇
来源:互联网 发布:关闭数据库的命令 编辑:程序博客网 时间:2024/06/08 18:11
写这篇内容的目的就是为了记录自己的成长,从刚开始进公司开发商城项目,到现在60多天自己成长了不少,也把app的base类完全改写了。、
文章主要记录自己的成长和想法,大神请无视~~~好了开始正题
BaseActivity——项目相当重要的一个类,为了以后拓展方便,也为了兼容之前的旧版,把这个类分为3个部分,分别是:
BaseActivity:目前主要负责Toast和和CheckPermission
public class BaseActivity extends AppCompatActivity { private PermissionCallback requestPermissionAndBack; protected void showToast(String content) { Toast.makeText(this, content, Toast.LENGTH_SHORT).show(); } protected void showToast(int content) { Toast.makeText(this, content, Toast.LENGTH_SHORT).show(); } public interface PermissionCallback { void requestPermissionAndBack(boolean isOk); } /** * 申请权限 * * @param permissions */ protected void checkAndRequestAllPermission(String[] permissions, PermissionCallback requestPermissionAndBack) { this.requestPermissionAndBack = requestPermissionAndBack; if (permissions == null) { return; } if (Build.VERSION.SDK_INT >= 23) { requestPermissions(permissions, 1); } } public void setRequestPermissionAndBack(PermissionCallback requestPermissionAndBack) { this.requestPermissionAndBack = requestPermissionAndBack; } /** * 申请权限 * * @param permissions */ protected void checkAndRequestAllPermission(String[] permissions) { if (permissions == null) { return; } if (Build.VERSION.SDK_INT >= 23) { requestPermissions(permissions, 1); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] per, @NonNull int[] grantResults) { boolean isAll = true; for (int i = 0; i < per.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { isAll = false; break; } } if (!isAll) { showToast(getResources().getString(R.string.no_permission)); } if (requestPermissionAndBack != null) { requestPermissionAndBack.requestPermissionAndBack(isAll);//isAll 用户是否拥有所有权限 } super.onRequestPermissionsResult(requestCode, per, grantResults); }}功能目前还比较少,但是很常用。
BaseActivityNet:主要负责与服务端进行交互(初级交互:只是传递数据,不做任何处理,使用抽象类传递到上层进行处理数据)
本类还负责监听网络的状态,目前是每次请求网络的时候会回调网络状态,以后会加上广播和服务,同时还有加入缓存的方法,网络框架用的NoHtpp,非常感谢框架的提供者(https://github.com/yanzhenjie/NoHttp)附上大神的github项目地址,表示感谢。
public abstract class BaseActivityNet extends BaseActivity { private DialogManager2 dialogManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (dialogManager == null) { dialogManager = new DialogManager2(this); } } //数据请求成功 protected abstract void requstSuccess(int what, JSONObject object); //请求服务器失败 protected abstract void requstFailed(int what, Exception e); //请求完成 protected abstract void requstFinish(int what); protected abstract void isNetWork(boolean isNetWork); /** * 建立网络请求 * * @param url 请求网址 * @param method 请求方式 0 post 1 get * @param defaultParam 是否有默认请求参数 */ protected Request<JSONObject> buildNetRequest(String url, int method, boolean defaultParam) { Request<JSONObject> jsonRequest = NoHttp.createJsonObjectRequest(url, method == 0 ? RequestMethod.POST : RequestMethod.GET); if (hasCache()) { jsonRequest.setCacheMode(CacheMode.REQUEST_NETWORK_FAILED_READ_CACHE); } if (defaultParam) { int uuid = AppConfig.getInstance().getInt("uuid", -1000); String token = AppConfig.getInstance().getString("token", ""); long expiring_time = AppConfig.getInstance().getLong("expiring_time", -2000); jsonRequest.add("sign", UrlEncodeUtils.createSign(url)); jsonRequest.add("uuid", uuid); jsonRequest.add("token", token); jsonRequest.add("expiring_time", expiring_time); } return jsonRequest; } //执行网络请求 protected void executeNetWork(int what, Request<JSONObject> jsonRequest, String message) { boolean netAva = NetUtils.isNetworkAvailable(this); isNetWork(netAva); if (!netAva) { dialogManager.buildAlertDialog(getResources().getString(R.string.no_network)); return; } MyApplication.getRequestQueue().add(what, jsonRequest, new NetResponseListener()); dialogManager.buildWaitDialog(message); } //执行网络请求 protected void executeNetWork(Request<JSONObject> jsonRequest, String message) { boolean netAva = NetUtils.isNetworkAvailable(this); isNetWork(netAva); if (!netAva) { dialogManager.buildAlertDialog(getResources().getString(R.string.no_network)); return; } MyApplication.getRequestQueue().add(0, jsonRequest, new NetResponseListener()); dialogManager.buildWaitDialog(message); } protected class NetResponseListener implements OnResponseListener<JSONObject> { @Override public void onStart(int what) { } @Override public void onSucceed(int what, Response<JSONObject> response) { requstSuccess(what, response.get()); } @Override public void onFailed(int what, Response<JSONObject> response) { requstFailed(what, response.getException()); } @Override public void onFinish(int what) { requstFinish(what); } } /** * 获取DialogManager * * @return */ public DialogManager2 getDm() { if (dialogManager == null) { dialogManager = new DialogManager2(this); } dialogManager.dismissDialog(); return dialogManager; } /** * 取消执行网络请求 */ protected void cancelNetWork() { MyApplication.getRequestQueue().cancelAll(); } /** * 是否启用缓存 * * @return */ protected boolean hasCache() { return false; }}这里有两个执行网络请求的方法,第二个带了int what的参数,这个参数可以判断是哪次网络请求,旧版没用到,所有为了兼容旧版,就要写两个方法了。
BaseNetActivity:也是抽象类,初步处理服务端返回的数据,Activity的亲爸爸。
public abstract class BaseNetActivity extends BaseActivityNet { public static int REQUEST_LOGIN; private Callback callback; private CallbackWhat callbackWhat; @Override protected void requstSuccess(int what, JSONObject jObj) { try { int status = jObj.optInt("status"); String message = jObj.optString("msg"); JSONObject dataObj = jObj.optJSONObject("data"); if (status == 200) { int update_status = dataObj.optInt("update_status"); if (update_status == 1) { AppConfig.getInstance().putString("token", dataObj.optString("token")); AppConfig.getInstance().putLong("expiring_time", dataObj.optLong("expiring_time")); } if (callback != null) {//对于200额外的处理 callback.handle200Data(dataObj, message); } if (callbackWhat != null) { callbackWhat.handle200Data(what, dataObj, message); } mhandle200Data(what, jObj, dataObj, message); } else if (status == 1 || status == 2 || status == 3 || status == 4 || status == 5) {//缺少sign参数 mhandleReLogin(what); Intent intent = new Intent(this, LoginActivity.class); AppConfig.getInstance().putInt("uuid", -1000); startActivityForResult(intent, REQUEST_LOGIN); ((MyApplication) getApplication()).exit(); } else if (status == 404) { if (callback != null) { callback.handle404(message); } if (callbackWhat != null) { callbackWhat.handle404(what, message); } mhandle404(what, dataObj, message); } else if (status == 500) { getDm().buildAlertDialog(message); } else if (status == 6) { getDm().buildAlertDialog(message); } } catch (Exception e) { e.printStackTrace(); } } @Override protected void requstFailed(int what, Exception e) { mhandleFailed(what, e); } @Override protected void requstFinish(int what) { try { if (getDm() != null) { getDm().dismissDialog(); } } catch (Exception e) { e.printStackTrace(); } mhandleFinish(what); } @Override protected void isNetWork(boolean isNetWork) { mhandleHasNetWord(isNetWork); if (!isNetWork) { //没网 if (callback != null) { callback.handleNoNetWork(); } if (callbackWhat != null) { callbackWhat.handleNoNetWork(); } mhandleNoNetWord(); } } protected void setCallback(Callback callback) { this.callback = callback; } public interface Callback { void handle200Data(JSONObject dataObj, String message); void handle404(String message); void handleNoNetWork(); } protected void setCallbackWhat(CallbackWhat callbackWhat) { this.callbackWhat = callbackWhat; } public interface CallbackWhat { void handle200Data(int what, JSONObject dataObj, String message); void handle404(int what, String message); void handleNoNetWork(); } protected void mhandle200Data(int what, JSONObject object, JSONObject dataObj, String message) { } protected void mhandle404(int what, JSONObject object, String message) { } protected void mhandleFinish(int what) { } protected void mhandleFailed(int what, Exception e) { } public static void setRequestCode(int requestLogin) { REQUEST_LOGIN = requestLogin; } protected void mhandleReLogin(int what) { } protected void mhandleNoNetWord() { } protected void mhandleHasNetWord(boolean isNetWork) { }}
其中有接口,也有受保护的方法,一方面为了兼容旧版,另一方便也为了使用方便,方法多任性。
这一层简单的解析数据,状态码在这层解析成具体的情况,传给Activity,比如:404错误、500错误、超时登录等。另还有200以后附带需要解析显示的数据也传给子类。
这种情况就是被挤下线,用户请求服务端会被强制跳转到登录页面,大家自己看其中有一个REQUST_LOGIN静态int变量还有set方法,这个是为了下节做登录事件准备的,现在可以不关注它。
BaseFragment与这边一样就不贴了,记录自己的成长~
0 0
- 【商城开发七】BaseActivity/BaseFragment篇
- 构建BaseActivity BaseFragment
- BaseActivity和BaseFragment封装
- BaseActivity与BaseFragment的封装
- android 之 Baseactivity 和BaseFragment
- 项目优化-BaseActivity和BaseFragment
- BaseActivity与BaseFragment的封装
- BaseActivity和BaseFragment 的封装
- 【安卓】安卓App开发思路 一步一个脚印(三)BaseActivity BaseFragment
- 为了快速Android开发整理出的一套框架,BaseFragment,BaseActivity,RecyleAdapter
- Android探索之旅(第二十八篇)BaseActivity,BaseFragment封装必要点
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- 从BaseActivity与BaseFragment的封装谈起
- windows下安装Linux(Ubuntu)系统
- 需要了解的基本概念——特征、训练集、样例等
- 模板的分离编译
- Ubuntu下安装tensorFlow遇到的问题和解决方案
- 【SegNet】SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image
- 【商城开发七】BaseActivity/BaseFragment篇
- uva 11082 Matrix Decompressing
- numpy的基本用法(一)——基本运算
- 归并排序
- Service之扩展知识(1)
- JSP基本语法
- C#知识小结一
- C语言基础知识1预备知识
- 《软技能——代码之外的生存指南》读书笔记之职业(一)