从自学Android到现在也四五个月了,简单的小项目也做过三四个了,想想也是该总结一波的时候了,希望对那些跟我一样自学挣扎的小伙伴有所帮助。
另外因为本人有iOS的基础,学习和思考过程很多都参照了很多我对iOS的理解,只是作为对比和加深理解,看到相关内容请自行查资料或者直接无视。
基本框架总结
因为本人是做iOS的,iOS项目经验还算是比较丰富的,再加上初学Android,项目也简单,因此在基本框架需求上并没有遇到太大问题。
个人认为移动端开发无论iOS还是安卓,比较通用的基本框架主要包括一下几个:
1.网络框架
首先,这里所说的网络框架主要针对第三方网络框架,原生的因为对新手来说并不好用所以不做讨论。
虽然做了三四个Android项目,但是基本都是很简单的,尤其前两个练手的基本没网络请求,用到网络的都是采用原生代码获取数据完事,没有采用第三方网络框架。我只说我后来两个项目用到过的两个网络框架。
第一个是xUtils。这是第一次接入第三方网络框架朋友推荐的。
准确说是xUtils中的HttpUtils。使用起来是这样的:
httpUtils.send(HttpRequest.HttpMethod.GET, url, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
//成功
}
@Override
public void onFailure(HttpException e, String s) {
//失败
e.printStackTrace();
}
});
总的来说这种格式还是蛮亲切的,对于诸如性能什么的高级特性不予评价,我也不懂。说亲切是因为这么写跟iOS的AFNetworking的写法真的像,大家感受下:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//成功
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//失败
NSLog(@"%@",[error localizedDescription]);
}];
第二个是Retrofit。这个是查了一些资料,看到好多人都说好,看了下就拿来用了。
个人觉得这个框架要好一些,主要在于它的使用方式实在是很清晰,对于我这种一直追求提高代码可维护性的人来说真的是太好了。下面直接贴基于我的理解下对Retrofit的实际应用代码(模板):
public class ServesManager {
private ServesManager(){}
public static ServesManager manager(){
return CreateManager.manager;
}
private static class CreateManager{
private final static ServesManager manager = new ServesManager();
}
String host = "域名";
Retrofit retrofit = new Retrofit.Builder().baseUrl(host).addConverterFactory(GsonConverterFactory.create()).build();
Serves serves = retrofit.create(Serves.class);
public static Serves getServes(){
return ServesManager.manager().serves;
}
public interface Serves{
//接口1
@POST("url1")
Call<BaseModel> api1(@Query("parameter1") String parameter1, @Query("parameter2") String parameter2);
//接口2
@POST("url2")
Call<BaseModel> api2(@Query("parameter1") String parameter1,@Query("parameter2") String parameter2);
//接口3
@POST("url3")
Call<BaseModel> api3(@Query("parameter1") String parameter1,@Query("parameter2") String parameter2,@Query("parameter3") String parameter3);
//上传头像
@Multipart
@POST("uploadurl")
Call<EditIconModel> editHeaderImg(@Query("parameter1") String parameter1, @Query("parameter2") String parameter2, @Part MultipartBody.Part file);
}
}
普通接口
ServesManager.getServes().api3(parameter1, parameter2, parameter3).enqueue(new Callback<BaseModel>() {
@Override
public void onResponse(Call<BaseModel> call, Response<BaseModel> response) {
//成功
BaseModel result = response.body();
}
@Override
public void onFailure(Call<BaseModel> call, Throwable t) {
t.printStackTrace();
//失败
}
});
}
上传图片或文件
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-data"),imageBytes);
//filename需与服务器协商,imageName.jpg这个随便写
MultipartBody.Part body =
MultipartBody.Part.createFormData("filename", "imageName.jpg", requestFile);
ServesManager.getServes(). editHeaderImg(parameter1, parameter2,body).enqueue(new Callback<EditIconModel>() {
@Override
public void onResponse(Call<EditIconModel> call, Response<EditIconModel> response) {
//成功
EditIconModel result = response.body();
}
@Override
public void onFailure(Call<EditIconModel> call, Throwable t) {
t.printStackTrace();
//失败
}
});
如上面代码,这样管理接口的好处很明显,每个接口很容易查看和维护,使用起来也是很方便的。
另外:因为我也是初学这个框架,使用不妥当之处欢迎指出。
2.数据解析框架
这个我只用过gson,用法我就不写了,而且gson可以与Retrofit结合使用,上面的代码就是结合Retrofit的使用方式,成功的时候返回值就是数据模型。
如果以后有用到其它的在做补充。
3.网络图片加载框架。
这个只用过glide,据说是谷歌推荐的,这个无所谓,还是蛮好用的。
Glide.with(context).load(url).into(imageView);
最后
说明一下,这三个框架是我个人觉得做移动应用开发的最基本的三个框架,虽然说并非必须,但是只要涉及这三个方面的应用使用这些框架能够极大提高开发效率,而且非常便于对代码的优化。
安利一个Android studio导入常用的开源第三方库的好用的小技巧:Android Studio查找并导入库