总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
public void setMessage(String message) {
this.message = message;
}
/**
- @return the data
*/
public T getData() {
return data;
}
/**
- @param data the data to set
*/
public void setData(T data) {
this.data = data;
}
public boolean isOK() {
return status >= 2000 && status < 3000;
}
}
注:,即泛型(Generic Types),JDK1.5新特性,使用时可以理解为创建一个用类型作为参数的类或方法。 也可以这样理解,就是说,若一个类或方法里面要用到另外一个类,但我又不确定所需要用到的那个类的具体类型,所以就用到了 Generic Types,这里简单说明,就不过多解释了,朋友若不明白可以去查阅相关资料。
定义了一个model类,我们还再去定义一个解析器接口,即 IParser ,该接口也使用泛型:
package org.gaochun.parser;
/**
-
@author gao_chun
*/
public interface IParser {
public T parse(String data);
}
那么下面我们再来看这个 AbstractParser 类,这个类是我们定义的一个抽象解析类,且实现了解析器接口,需要注意的是 我们定义的解析器 IParser 使用了泛型,model类 Result 也是如此,再次来看具体的 AbstractParser :
import org.gaochun.model.Result;
import org.gaochun.utils.JsonUtils;
import org.json.JSONArray;
import org.json.JSONObject;
/**
-
抽象解析类
-
目的:解析服务器端外层数据,并供具体解析类继承重写解析方法
-
@author gao_chun
*/
public abstract class AbstractParser implements IParser<Result> {
@Override
public final Result parse(String response) {
final Result result = new Result(); //创建Result类对象
if (response != null && response.length() > 0) {
final JSONObject jsonObject = JsonUtils.createJsonObject(response); //将response的数据创建为JsonObject
if (jsonObject != null) {
//获得status、message、data数据
result.setStatus(JsonUtils.getStringInt(jsonObject, “status”));
result.setMessage(JsonUtils.getString(jsonObject, “message”));
final Object object = JsonUtils.getObject(jsonObject, “data”);
//实现data进一步解析,泛型
if (object != null && (object instanceof JSONObject || object instanceof JSONArray)) {
T data = parseData(object); //解析
result.setData(data); //设置数据
} else {
result.setData(null);
}
} else {
result.setStatus(Result.STATUS_JSON_ERROR);
}
} else {
result.setStatus(Result.STATUS_RESPONSE_NULL_OR_EMPTY);
}
return result;
}
//抽象解析方法,目的是为了让具体的解析类重写
protected abstract T parseData(Object object);
}
也许朋友就恍然大悟了,沃尼玛,原来是酱紫的啊!
我们回过头来看看登录请求:
private void login(String name,String pwd){
GenericDataManager mDataManager = GenericDataManager.getInstance();//通用网络管理类
RequestParams mParams = RequestParameterFactory.getInstance().login(name, pwd);//请求参数管理类
mDataManager.dataRequest(0,Constants.REQUEST.GET, RequestURL.URL_LOGIN, mParams,new ResultParser(), this);//执行网络请求
}
在 dataRequest 中传入了 new ResultParser() 解析对象:
public class ResultParser extends AbstractParser {
/* (non-Javadoc)
- @see app.backend.network.AbstractParser#parseData(java.lang.Object)
*/
@Override
public Object parseData(Object object) {
return object;
}
这里要说明,若服务器端 data 中无返回数据,也就是说发出请求,若只需要告诉我 success 或者 failed,那就直接传入new ResultParser() 解析器对象便可,在Activity的回调中,取出对应状态判断即可:
若 data 中存在返回数据需要解析,那么此时需要创建解析器,给个例子:
//继承AbstractParser 并在泛型中传入解析后的结果(集合或对象)
public class WasherParser extends AbstractParser<List> {
@Override
public List parseData(Object object) {
if (object != null) {
return JSON.parseArray(object.toString(), NearbyWasher.class);
}
return null;
}
}
JSON.parseArray() 方法是使用了阿里巴巴的fastJson,此处大家也可以使用Gson,或者使用Android自带Json工具解析。
关于fastJson的使用,本人之前也总结了一篇博文可供大家参考。
Android开发之如何使用FastJson:http://blog.youkuaiyun.com/gao_chun/article/details/39232097
继续给大家介绍 RequestParameterFactory ,该类的定义是封装了参数请求,如:
可能有朋友会说,直接写在 private void login(String name,String pwd) 方法中不就可以了,何必再创建一个类呢?
个人觉得,这样定义出一个类的话,有便于管理,若需求改变,增加了某个字段,不需要到处在Activity中寻找,且项目层次结构清晰,个人愚见。
这里还需要给大家介绍一个类 GlobalConfigManager,该类为本地配置管理,主要作用是读取服务器ip地址,比如我们的登录接口是:http://192.168.1.1:8080/WashCar/washer/login?name=yang&pwd=123,我们将前缀http://192.168.1.1:8080 写在AndroidManifest.xml文件的meta-data中,使用时在MainApplication中提前初始化:
<application
android:name=“org.gaochun.ui.MainApplication”
android:allowBackup=“true”
android:icon=“@drawable/ic_launcher”
android:label=“@string/app_name”
android:theme=“@style/Theme.White.NoTitleBar” >
<activity
android:name=“org.gaochun.activity.LoginActivity”
android:label=“@string/app_name” >
最后
总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;
技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关
在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
相信自己,没有做不到的,只有想不到的
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
。
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
[外链图片转存中…(img-O68dG5vK-1715671704980)]
[外链图片转存中…(img-QmCkOvti-1715671704980)]
相信自己,没有做不到的,只有想不到的
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!