[s1e6]超详细!3小时从0开始开发一个GitHub客户端(Android)(1)

最近收到本书《Android App开发入门与实战》的一些读者的反馈,希望书籍最后章节的GitHub客户端实战开发环节能否单独拿出来讲解一遍,最好能通过视频形式展示出来。于是这段时间把GitHub客户端开发教程重新整理了一遍,并录制成视频。

这是第6篇,本篇正式进入编码阶段,首先介绍架构和模块的搭建。

本章节建议观看视频讲解。

微信搜索 【国民程序员】,回复 “github”,即可获取本项目源码和后续完整的实战文章教程。

文章目录

  • 一、架构

    • 1. MVVM
  • 二、模块

    • 1. 网络
  • 2. 图片

  • 3. 数据库

  • 4. base

  • 5. 数据

  • 6. 其它

一、架构

==============================================================

1. MVVM


在这里插入图片描述

BaseViewModel是业务VM的基类;

public abstract class BaseViewModel extends AndroidViewModel {

protected Context context;

protected T repository;

public BaseViewModel(@NonNull Application application) {

super(application);

context = application;

repository = TUtil.getInstance(this, 0);

}

}

BaseRepository是业务Model的基类;

public abstract class BaseRepository {

private final String TAG = “BaseRepository”;

protected MutableLiveData<Data> liveDataLogin;

public void login(String authorization) {

… …

}

}

(附)AppRepository处理跟数据相关的业务入口;

在这里插入图片描述

二、模块

==============================================================

1. 网络


public enum RetrofitManager {

INSTANCE;

private final String TAG = “RetrofitManager”;

private HashMap<String, Retrofit> retrofitMap = new HashMap<>();

private void createRetrofit(@NonNull String baseUrl, boolean isJson) {

int timeOut = Constant.HTTP_TIME_OUT;

Cache cache = new Cache(FileUtil.getHttpImageCacheDir(MyApplication.getInstance()),

Constant.HTTP_MAX_CACHE_SIZE);

// Log信息拦截器

HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();

loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);//这里可以选择拦截级别

OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder()

.connectTimeout(timeOut, TimeUnit.MILLISECONDS)

.addInterceptor(loggingInterceptor)

.cache(cache);

if (!StringUtil.isEmpty(App.sAuthorization)) {

okHttpClientBuilder.interceptors().add(0, chain -> {

Request.Builder reqBuilder = chain.request()

.newBuilder().addHeader(“Authorization”, App.sLastLoginUser.getToken());

return chain.proceed(reqBuilder.build());

});

}

Retrofit.Builder builder = new Retrofit.Builder()

.baseUrl(baseUrl)

.addConverterFactory(GsonConverterFactory.create())//定义转化器,用Gson将服务器返回的Json格式解析成实体

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//关联RxJava

.client(okHttpClientBuilder.build());

if (isJson) {

builder.addConverterFactory(GsonConverterFactory.create());

} else {

builder.addConverterFactory(SimpleXmlConverterFactory.createNonStrict());

}

retrofitMap.put(baseUrl + “-” + isJson, builder.build());

}

/**

  • 区分登录态的Retrofit

  • @param baseUrl

  • @param withLogin

  • @return

*/

public Retrofit getRetrofit(@NonNull String baseUrl, boolean withLogin) {

String key = baseUrl + “-” + withLogin;

if (!retrofitMap.containsKey(key)) {

createRetrofit(baseUrl, withLogin);

}

return retrofitMap.get(key);

}

public Retrofit getRetrofit(@NonNull String baseUrl) {

return getRetrofit(baseUrl, true);

}

}

2. 图片


QuickModule:自动切换功能模块的实现方式,以图片模块为例。

QuickModule.imageProcessor().loadNet(url, mImageView);

public class QuickModule {

private static IImageProcessor mIImageProcessor;

private static ImageConfig mImageConfig;

//配置生效

public static void launch() {

//image

if (mIImageProcessor == null) {

mIImageProcessor = new GlideProcessor();

}

mIImageProcessor.init(MyApplication.getInstance(), mImageConfig);

}

//image调用入口

public static T imageProcessor() {

if (mIImageProcessor != null) {

return (T) mIImageProcessor;

}

return (T) new GlideProcessor();

}

//image配置入口

public static ImageConfig configImage() {

return configImage(null);

}

//image配置入口

public static ImageConfig configImage(IImageProcessor processor) {

if (processor == null) {

mImageConfig = new ImageConfig();

}

else {

mIImageProcessor = processor;

mImageConfig = new ImageConfig();

}

return mImageConfig;

}

}

3. 数据库


在这里插入图片描述

Room主要由三部分组成:Database、Entity、Dao。

在这里插入图片描述

4. base


在这里插入图片描述

public abstract class BaseActivity extends QuickActivity {

//默认不使用自带titlebar

@Override

protected boolean isLoadDefaultTitleBar() {

return false;

}

@Override

protected void getBundleExtras(Bundle extras) {

}

//默认不开启eventbus

@Override

protected boolean isBindEventBus() {

return false;

}

@Override

protected void onEventComing(EventCenter eventCenter) {

}

@Override

protected Intent getGoIntent(Class<?> clazz) {

if (BaseFragment.class.isAssignableFrom(clazz)) {

Intent intent = new Intent(this, FragmentActivity.class);

intent.putExtra(“fragmentName”, clazz.getName());

return intent;

} else {

return super.getGoIntent(clazz);

}

}

}

public abstract class MVVMActivity extends BaseActivity {

protected T mViewModel;

public T getViewModel() {

return mViewModel;

}

public Class getTClass() {

try {

return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

@Override

protected void initViewsAndEvents(Bundle savedInstanceState) {

if (mViewModel == null) {

Class clazz = getTClass();

if (clazz != null) {

mViewModel = ViewModelProviders.of(this).get(getTClass());

}

}

}

}

5. 数据


状态 + 泛型 + msg

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,自己不成体系的自学效果低效漫长且无助**。

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-mpxdqdyM-1715789435223)]

[外链图片转存中…(img-hfAELO93-1715789435224)]

[外链图片转存中…(img-qwsMyrfJ-1715789435225)]

[外链图片转存中…(img-RZt0U7Oc-1715789435226)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值