MVP+Dagger2+RXJava2+Retrofit+RxBus+ RXBinding+RxLifecyle+Java1.8的Lambda

项目的整体框架使用:MVP+Dagger2+RXJava2+Retrofit+RxBus+ RXBinding+RxLifecyle+Java1.8的Lambda

1、人脸识别
2、生成PDF文件
3、微信,QQ登陸
4、扫描二维码
5、自定义数字键盘
6、搜索按钮
7、头像上传
8、区域选择
9、IP获取,区域选择,定位功能

PDF数字签名

ITEXT5.0以上数字签名(android 上可用)

MVP的使用:

Android 谈谈我所理解的MVP

Dagger2的使用:

Dagger2 这次入门就不用放弃了

解锁Dagger2使用姿势(一)

解锁Dagger2使用姿势(二) 之带你理解@Scope

Dagger2 最清晰的使用教程

RXJava的使用:

RxJava 从入门到放弃再到不离不弃

RXJava的使用一

使得AndroidStudio支持Java8的Lambda特性:

AndroidStudio对于Java8特性的支持

Android注解使用之注解编译android-apt如何切换到annotationProcessor

使用java8新特性流API

Retrofit的使用:

全新的网络加载框架Retrofit2,上位的小三

使用Retrofit2 RxJava 文件上传

Retrofit 2 - 如何从服务器下载文件

Android 文件下载引擎,稳定、高效、灵活、简单易用

白天模式和夜间模式

当前代码在Application的onCreate方法中调用AppCompatDelegate.setDefaultNightMode来初始化夜间模式

    if (dataManager.getNightModeState()) {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }

在SettingActivity设置页面点击白天黑夜模式切换:

    @Override
    public void useNightMode(boolean isNight) {
        if (isNight == mPresenter.getNightModeState()) {
            return;
        }
        mPresenter.setNightModeState(isNight);
        if (isNight) {
            AppCompatDelegate.setDefaultNightMode(
                    AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            AppCompatDelegate.setDefaultNightMode(
                    AppCompatDelegate.MODE_NIGHT_NO);
        }
        recreate();
    }
数据加载的进度条以及数据加载失败的提示内容

项目中的Activity,耗时操作需要加载进度条,以及获取数据成功或者失败的情况页面替换

需要继承自RootActivity,加载数据的过程需要调用showLoading(),
数据加载成功时候调用showMain(),加载失败的时候需要调用showError();
需要当前页面的主要数据有一个控件的ID是view_main;

/**
 * @author: AFinalStone 602392033@qq.com
 * @date: 2017/4/21
 * @desciption:
 */

public abstract class RootActivity<T extends BaseContract.BasePresenter> extends BaseActivity<T>{

    private static final int STATE_MAIN = 0x00;
    private static final int STATE_LOADING = 0x01;
    private static final int STATE_ERROR = 0x02;

    private ProgressImageView ivLoading;
    private View viewError;
    private View viewLoading;
    private ViewGroup viewMain;
    private ViewGroup mParent;

    private int mErrorResource = R.layout.view_error;

    private int currentState = STATE_MAIN;
    private boolean isErrorViewAdded = false;

    @Override
    protected void initEventAndData() {
        viewMain = (ViewGroup) findViewById(R.id.view_main);
        if (viewMain == null) {
            throw new IllegalStateException(
                    "The subclass of RootActivity must contain a View named 'view_main'.");
        }
        if (!(viewMain.getParent() instanceof ViewGroup)) {
            throw new IllegalStateException(
                    "view_main's ParentView should be a ViewGroup.");
        }
        mParent = (ViewGroup) viewMain.getParent();
        View.inflate(mContext, R.layout.view_progress, mParent);
        viewLoading = mParent.findViewById(R.id.view_loading);
        ivLoading = (ProgressImageView) viewLoading.findViewById(R.id.iv_progress);
        viewLoading.setVisibility(View.GONE);
        viewMain.setVisibility(View.VISIBLE);
    }

    @Override
    public void showError() {
        if (currentState == STATE_ERROR)
            return;
        if (!isErrorViewAdded) {
            isErrorViewAdded = true;
            View.inflate(mContext, mErrorResource, mParent);
            viewError = mParent.findViewById(R.id.view_error);
            if (viewError == null) {
                throw new IllegalStateException(
                        "A View should be named 'view_error' in ErrorLayoutResource.");
            }
        }
        hideCurrentView();
        currentState = STATE_ERROR;
        viewError.setVisibility(View.VISIBLE);
    }

    @Override
    public void showLoading() {
        if (currentState == STATE_LOADING)
            return;
        hideCurrentView();
        currentState = STATE_LOADING;
        viewLoading.setVisibility(View.VISIBLE);
        ivLoading.start();
    }

    @Override
    public void showMain() {
        if (currentState == STATE_MAIN)
            return;
        hideCurrentView();
        currentState = STATE_MAIN;
        viewMain.setVisibility(View.VISIBLE);
    }

    private void hideCurrentView() {
        switch (currentState) {
            case STATE_MAIN:
                viewMain.setVisibility(View.GONE);
                break;
            case STATE_LOADING:
                ivLoading.stop();
                viewLoading.setVisibility(View.GONE);
                break;
            case STATE_ERROR:
                if (viewError != null) {
                    viewError.setVisibility(View.GONE);
                }
                break;
        }
    }

    public void setErrorResource(int errorLayoutResource) {
        this.mErrorResource = errorLayoutResource;
    }
}
RXBinding的使用

RxBinding详解: 规范而强大的安卓UI响应式编程

RxBus的使用

用RxJava实现事件总线(Event Bus)

RxLifecyle的使用

RxAndroid之Rxlifecycle使用

RxJava2+Retrofit2+RxLifecycle2使用MVP模式构建项目

Android 使用RxLifecycle解决RxJava内存泄漏

Android 谈谈我所理解的MVP

RxPermission的使用

使用RxPermission框架对android6.0权限进行检测

测试

Android自动化测试工具 UiAutomator使用详解

二维码扫描

几行代码快速集成二维码扫描功能

QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

数据库

【Android】Realm详解

8.5.1版本的bufferKnife对Java1.8的支持有问题

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spring Boot的Android开发项目可以是一个使用Spring Boot框架搭建的后端服务,为Android客户端提供接口与数据的交互。以下是一个可能的开发项目的描述: 该项目的目标是开发一个匿名社交平台的Android客户端应用,并使用Spring Boot作为后端服务。 首先,我们将使用Spring Boot来构建一个可扩展的、高性能的后端服务。后端服务将提供用户认证、用户信息管理、文章发布、评论回复等功能的接口,并通过数据库存储数据。我们可以使用Spring Security实现用户认证和授权功能,使用Spring Data JPA实现对数据库的访问和操作。 接下来,我们将在Android客户端应用中集成与后端服务的交互。通过使用Retrofit等网络库,我们可以方便地与后端服务进行通信,发送HTTP请求并接收响应。例如,用户可以通过登录请求进行认证,在后端验证用户名和密码的正确性,并返回登录凭证。在认证成功后,用户可以使用凭证访问其他需要认证的接口,如发表文章、评论回复等。 在Android客户端应用中,我们可以使用MVP(Model-View-Presenter)或MVVM(Model-View-ViewModel)等架构模式进行开发,将业务逻辑与界面逻辑分离。我们可以使用RxJava来处理异步事件和数据流,通过LiveData来实现数据观察和通知。同时,我们可以使用Dagger2等依赖注入框架来管理组件间的依赖关系,提高代码的可测试性和可维护性。 总结而言,基于Spring Boot的Android开发项目是一个使用Spring Boot作为后端服务,为Android客户端提供接口与数据交互的项目。通过结合网络库、架构模式和依赖注入等技术,我们可以开发出高性能、可扩展、易维护的Android应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值