├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── libs │ └── ACache.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── tsy │ │ └── baseandroidproject │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── tsy │ │ │ └── baseandroidproject │ │ │ ├── Base │ │ │ ├── BaseActivity.java │ │ │ ├── BasePresenter.java │ │ │ └── BaseView.java │ │ │ ├── GlobalApp.java │ │ │ └── feature │ │ │ ├── Home │ │ │ ├── contract │ │ │ │ └── HomeContract.java │ │ │ ├── interactor │ │ │ │ └── HomeInteractor.java │ │ │ ├── presenter │ │ │ │ └── HomePresenter.java │ │ │ └── view │ │ │ │ └── HomeActivity.java │ │ │ └── login │ │ │ ├── bean │ │ │ └── UserInfo.java │ │ │ ├── contract │ │ │ └── LoginContract.java │ │ │ ├── interactor │ │ │ └── LoginInteractor.java │ │ │ ├── presenter │ │ │ └── LoginPresenter.java │ │ │ └── view │ │ │ └── LoginActivity.java │ └── res │ │ ├── layout │ │ ├── activity_home.xml │ │ └── activity_login.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── tsy │ └── baseandroidproject │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── myokhttp ├── .gitignore ├── README.md ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── tsy │ │ └── sdk │ │ └── myokhttp │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── tsy │ │ │ └── sdk │ │ │ └── myokhttp │ │ │ ├── MyOkHttp.java │ │ │ ├── body │ │ │ ├── ProgressRequestBody.java │ │ │ └── ResponseProgressBody.java │ │ │ ├── response │ │ │ ├── DownloadResponseHandler.java │ │ │ ├── GsonResponseHandler.java │ │ │ ├── IResponseHandler.java │ │ │ ├── JsonResponseHandler.java │ │ │ └── RawResponseHandler.java │ │ │ └── util │ │ │ └── LogUtils.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── tsy │ └── sdk │ └── myokhttp │ └── ExampleUnitTest.java ├── myutil ├── .gitignore ├── README.md ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── tsy │ │ └── sdk │ │ └── myutil │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── tsy │ │ │ └── sdk │ │ │ └── myutil │ │ │ ├── BitmapUtils.java │ │ │ ├── DeviceUtils.java │ │ │ ├── HttpURLConnectionUtils.java │ │ │ ├── LogUtils.java │ │ │ ├── MD5Utils.java │ │ │ ├── ManifestUtils.java │ │ │ ├── NetworkUtils.java │ │ │ ├── StringUtils.java │ │ │ └── ToastUtils.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── tsy │ └── sdk │ └── myutil │ └── ExampleUnitTest.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BaseAndroidProject 2 | Android项目基础架构。包含架构分层、基本工具层等, 持续更新中 3 | 4 | ## 架构 5 | 6 | 1. 基于MVP架构进行分层.详见[http://www.jianshu.com/p/2ca7767df08c](http://www.jianshu.com/p/2ca7767df08c) 7 | 1. 规范命名.详见[http://www.jianshu.com/p/fcdded2f8444](http://www.jianshu.com/p/fcdded2f8444) 8 | 9 | ## 底层库 10 | 11 | ### 网络库 12 | 13 | 采用二次封装后的okhttp3+Gson.(没有使用retrofit,考虑到服务端提供的API可能不会很标准) 14 | 15 | 基本功能: 16 | 17 | 1. POST请求 18 | 1. GET请求 19 | 1. 上传文件&进度监听 20 | 1. 下载文件&进度监听 21 | 1. 返回可以选择Gson格式 22 | 1. 取消某个context的所有网络请求 23 | 24 | 并且将该功能模块独立为MyOkhttp,可以重复使用. 25 | 26 | 详细使用见: 27 | 28 | [MyOkhttp README](https://github.com/tsy12321/BaseAndroidProject/tree/master/myokhttp) 29 | 30 | ### 通用工具库 31 | 32 | 将常用的util封装到一个module - myutil 33 | 34 | 详细目录wiki见: 35 | 36 | [MyUtil README](https://github.com/tsy12321/BaseAndroidProject/tree/master/myutil) 37 | 38 | ### 依赖注入库 39 | 40 | ButterKnife. 41 | 42 | 详见[http://www.jianshu.com/p/32f6260ac300](http://www.jianshu.com/p/32f6260ac300) 43 | 44 | ### 图片开源库 45 | 46 | Glide. 47 | 48 | 详见[http://www.jianshu.com/p/18618ad47d01](http://www.jianshu.com/p/18618ad47d01) 49 | 50 | ### 缓存开源库 51 | 52 | ASimpleCache. 53 | 54 | 详见[http://www.jianshu.com/p/25c107ed7348](http://www.jianshu.com/p/25c107ed7348) 55 | 56 | ### Android M权限控制库 57 | 58 | Easypermissions 59 | 60 | 详见[http://www.jianshu.com/p/2b3661928e66](http://www.jianshu.com/p/2b3661928e66) 61 | 62 | ### 欢迎关注我的公众号 63 | 64 | ![我的公众号](https://github.com/tsy12321/PayAndroid/blob/master/wxmp_avatar.jpg) 65 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.2" 6 | 7 | defaultConfig { 8 | applicationId "com.tsy.baseandroidproject" 9 | minSdkVersion 9 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | buildscript { 23 | repositories { 24 | mavenCentral() 25 | } 26 | dependencies { 27 | classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 28 | } 29 | } 30 | 31 | apply plugin: 'com.neenbedankt.android-apt' 32 | 33 | dependencies { 34 | testCompile 'junit:junit:4.12' 35 | compile 'com.android.support:appcompat-v7:23.4.0' 36 | 37 | //ButterKnife 38 | compile 'com.jakewharton:butterknife:8.2.1' 39 | apt 'com.jakewharton:butterknife-compiler:8.2.1' 40 | //glide 41 | compile 'com.github.bumptech.glide:glide:3.7.0' 42 | //easypermission 43 | compile 'pub.devrel:easypermissions:0.1.9' 44 | //cache 45 | compile files('libs/ACache.jar') 46 | //okhttp 47 | compile project(':myokhttp') 48 | //myutil 49 | compile project(':myutil') 50 | } 51 | -------------------------------------------------------------------------------- /app/libs/ACache.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tsy12321/BaseAndroidProject/ad8d5762f814006215dc075551e18d47547b5832/app/libs/ACache.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/tsy/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/tsy/baseandroidproject/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/Base/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.Base; 2 | 3 | import android.app.Activity; 4 | 5 | /** 6 | * BaseActivity 7 | * Created by tsy on 16/7/22. 8 | */ 9 | public class BaseActivity extends Activity { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/Base/BasePresenter.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.Base; 2 | 3 | 4 | /** 5 | * Created by tsy on 16/7/26. 6 | */ 7 | public interface BasePresenter { 8 | void start(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/Base/BaseView.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.Base; 2 | 3 | /** 4 | * Created by tsy on 16/8/30. 5 | */ 6 | public interface BaseView { 7 | void showToast(String msg); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/GlobalApp.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | 6 | /** 7 | * 全局Application 8 | * Created by tsy on 16/7/15. 9 | */ 10 | public class GlobalApp extends Application { 11 | 12 | private static GlobalApp mGlobalApp; 13 | private Context mContext; 14 | 15 | @Override 16 | public void onCreate() { 17 | super.onCreate(); 18 | 19 | mGlobalApp = this; 20 | this.mContext = getApplicationContext(); 21 | } 22 | 23 | /** 24 | * 获取全局Application 25 | * @return 26 | */ 27 | public static synchronized GlobalApp getInstance() { 28 | return mGlobalApp; 29 | } 30 | 31 | /** 32 | * 获取ApplicationContext 33 | * @return 34 | */ 35 | public Context getContext() { 36 | return mContext; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/Home/contract/HomeContract.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.Home.contract; 2 | 3 | import com.tsy.baseandroidproject.Base.BasePresenter; 4 | import com.tsy.baseandroidproject.Base.BaseView; 5 | 6 | /** 7 | * Created by tsy on 16/8/30. 8 | */ 9 | public interface HomeContract { 10 | 11 | interface View extends BaseView { 12 | 13 | } 14 | 15 | interface Presenter extends BasePresenter { 16 | void onPost(); 17 | } 18 | 19 | interface Interactor { 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/Home/interactor/HomeInteractor.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.Home.interactor; 2 | 3 | import com.tsy.baseandroidproject.feature.Home.contract.HomeContract; 4 | 5 | /** 6 | * Created by tsy on 16/8/30. 7 | */ 8 | public class HomeInteractor implements HomeContract.Interactor { 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/Home/presenter/HomePresenter.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.Home.presenter; 2 | 3 | import com.tsy.baseandroidproject.feature.Home.contract.HomeContract; 4 | import com.tsy.baseandroidproject.feature.Home.interactor.HomeInteractor; 5 | import com.tsy.baseandroidproject.feature.login.contract.LoginContract; 6 | import com.tsy.baseandroidproject.feature.login.interactor.LoginInteractor; 7 | 8 | /** 9 | * Created by tsy on 16/8/30. 10 | */ 11 | public class HomePresenter implements HomeContract.Presenter { 12 | 13 | private HomeContract.View mView; 14 | private HomeContract.Interactor mInteractor; 15 | private LoginContract.Interactor mLoginInteractor; 16 | 17 | public HomePresenter(HomeContract.View view) { 18 | mView = view; 19 | mInteractor = new HomeInteractor(); 20 | mLoginInteractor = new LoginInteractor(); 21 | } 22 | 23 | @Override 24 | public void start() { 25 | 26 | } 27 | 28 | @Override 29 | public void onPost() { 30 | //判断用户有没有登录 31 | if(!mLoginInteractor.isLogin()) { 32 | // 跳转登录 33 | // TODO: 16/8/30 34 | return; 35 | } 36 | 37 | //跳转发帖页面 38 | // TODO: 16/8/30 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/Home/view/HomeActivity.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.Home.view; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.tsy.baseandroidproject.Base.BaseActivity; 6 | import com.tsy.baseandroidproject.R; 7 | import com.tsy.baseandroidproject.feature.Home.contract.HomeContract; 8 | import com.tsy.baseandroidproject.feature.Home.presenter.HomePresenter; 9 | 10 | import butterknife.ButterKnife; 11 | import butterknife.OnClick; 12 | 13 | public class HomeActivity extends BaseActivity implements HomeContract.View { 14 | 15 | private HomeContract.Presenter mPresnter; 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_home); 21 | ButterKnife.bind(this); 22 | 23 | mPresnter = new HomePresenter(this); 24 | } 25 | 26 | @OnClick(R.id.btnPost) 27 | public void onPost() { 28 | mPresnter.onPost(); 29 | } 30 | 31 | @Override 32 | public void showToast(String msg) { 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/login/bean/UserInfo.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.login.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by tsy on 16/8/30. 7 | */ 8 | public class UserInfo implements Serializable { 9 | 10 | private static final long serialVersionUID = 1L; // 定义序列化ID 11 | 12 | public String uid; 13 | public String userName; 14 | public String token; 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/login/contract/LoginContract.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.login.contract; 2 | 3 | import com.tsy.baseandroidproject.Base.BasePresenter; 4 | import com.tsy.baseandroidproject.Base.BaseView; 5 | import com.tsy.baseandroidproject.feature.login.bean.UserInfo; 6 | 7 | /** 8 | * Login接口层 9 | * Created by tsy on 16/8/30. 10 | */ 11 | public interface LoginContract { 12 | 13 | interface View extends BaseView { 14 | /** 15 | * 跳转Home 16 | */ 17 | void goHome(); 18 | } 19 | 20 | interface Presenter extends BasePresenter { 21 | /** 22 | * login 23 | * @param phone 24 | * @param password 25 | */ 26 | void onLogin(String phone, String password); 27 | } 28 | 29 | interface Interactor { 30 | /** 31 | * do login 32 | * @param phone 33 | * @param password 34 | * @param callback 35 | */ 36 | void doLogin(String phone, String password, LoginCallback callback); 37 | interface LoginCallback { 38 | void onSuccess(UserInfo user_info); 39 | void onFailure(String msg); 40 | } 41 | 42 | /** 43 | * 是否登录 44 | * @return 45 | */ 46 | boolean isLogin(); 47 | 48 | /** 49 | * 获取当前登录用户 50 | * @return 51 | */ 52 | UserInfo getLoginUser(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/login/interactor/LoginInteractor.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.login.interactor; 2 | 3 | import android.os.Handler; 4 | 5 | import com.tsy.baseandroidproject.GlobalApp; 6 | import com.tsy.baseandroidproject.feature.login.bean.UserInfo; 7 | import com.tsy.baseandroidproject.feature.login.contract.LoginContract; 8 | import com.tsy.sdk.acache.ACache; 9 | import com.tsy.sdk.myokhttp.MyOkHttp; 10 | import com.tsy.sdk.myutil.StringUtils; 11 | 12 | /** 13 | * Login Interactor层 14 | * Created by tsy on 16/8/30. 15 | */ 16 | public class LoginInteractor implements LoginContract.Interactor { 17 | 18 | private MyOkHttp mApi; 19 | private ACache mCache; 20 | 21 | //缓存key 22 | private final String CACHE_KEY_USERINFO = "CACHE_KEY_USERINFO"; 23 | 24 | public LoginInteractor() { 25 | mApi = MyOkHttp.get(); 26 | mCache = ACache.get(GlobalApp.getInstance().getContext()); 27 | } 28 | 29 | @Override 30 | public void doLogin(String phone, String password, final LoginCallback callback) { 31 | //模拟异步网络请求登录 32 | 33 | Handler handler = new Handler(); 34 | 35 | handler.postDelayed(new Runnable() { 36 | @Override 37 | public void run() { 38 | UserInfo userInfo = new UserInfo(); 39 | userInfo.uid = "1212121"; 40 | userInfo.userName = "tsy12321"; 41 | userInfo.token = "wqw13w12312wsqw12"; 42 | 43 | //存入缓存 44 | mCache.put(CACHE_KEY_USERINFO, userInfo); 45 | 46 | callback.onSuccess(userInfo); 47 | } 48 | }, 2000); 49 | } 50 | 51 | @Override 52 | public boolean isLogin() { 53 | UserInfo userInfo = (UserInfo) mCache.getAsObject(CACHE_KEY_USERINFO); 54 | if(!StringUtils.isEmpty(userInfo.uid) && !StringUtils.isEmpty(userInfo.token)) { 55 | return true; 56 | } 57 | return false; 58 | } 59 | 60 | @Override 61 | public UserInfo getLoginUser() { 62 | return (UserInfo) mCache.getAsObject(CACHE_KEY_USERINFO); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/login/presenter/LoginPresenter.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.login.presenter; 2 | 3 | import com.tsy.baseandroidproject.feature.login.bean.UserInfo; 4 | import com.tsy.baseandroidproject.feature.login.contract.LoginContract; 5 | import com.tsy.baseandroidproject.feature.login.interactor.LoginInteractor; 6 | import com.tsy.sdk.myutil.StringUtils; 7 | 8 | /** 9 | * Login presenter层 10 | * Created by tsy on 16/8/30. 11 | */ 12 | public class LoginPresenter implements LoginContract.Presenter { 13 | 14 | private LoginContract.View mView; 15 | private LoginContract.Interactor mInteractor; 16 | 17 | public LoginPresenter(LoginContract.View view) { 18 | mView = view; 19 | mInteractor = new LoginInteractor(); 20 | } 21 | 22 | @Override 23 | public void start() { 24 | 25 | } 26 | 27 | @Override 28 | public void onLogin(String phone, String password) { 29 | if(StringUtils.isEmpty(phone)) { 30 | mView.showToast("Empty phone"); 31 | return; 32 | } 33 | 34 | if(StringUtils.isEmpty(password)) { 35 | mView.showToast("Empty password"); 36 | return; 37 | } 38 | 39 | mInteractor.doLogin(phone, password, new LoginContract.Interactor.LoginCallback() { 40 | @Override 41 | public void onSuccess(UserInfo user_info) { 42 | mView.goHome(); 43 | } 44 | 45 | @Override 46 | public void onFailure(String msg) { 47 | mView.showToast(msg); 48 | } 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/tsy/baseandroidproject/feature/login/view/LoginActivity.java: -------------------------------------------------------------------------------- 1 | package com.tsy.baseandroidproject.feature.login.view; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.widget.EditText; 6 | 7 | import com.tsy.baseandroidproject.Base.BaseActivity; 8 | import com.tsy.baseandroidproject.GlobalApp; 9 | import com.tsy.baseandroidproject.R; 10 | import com.tsy.baseandroidproject.feature.Home.view.HomeActivity; 11 | import com.tsy.baseandroidproject.feature.login.contract.LoginContract; 12 | import com.tsy.baseandroidproject.feature.login.presenter.LoginPresenter; 13 | import com.tsy.sdk.myutil.ToastUtils; 14 | 15 | import butterknife.BindView; 16 | import butterknife.ButterKnife; 17 | import butterknife.OnClick; 18 | 19 | public class LoginActivity extends BaseActivity implements LoginContract.View { 20 | 21 | @BindView(R.id.editPhone) 22 | EditText editPhone; 23 | 24 | @BindView(R.id.editPassword) 25 | EditText editPassword; 26 | 27 | private LoginContract.Presenter mPresenter; 28 | 29 | @Override 30 | protected void onCreate(Bundle savedInstanceState) { 31 | super.onCreate(savedInstanceState); 32 | setContentView(R.layout.activity_login); 33 | ButterKnife.bind(this); 34 | 35 | mPresenter = new LoginPresenter(this); 36 | } 37 | 38 | @OnClick(R.id.btnLogin) 39 | public void onLogin() { 40 | mPresenter.onLogin(editPhone.getText().toString(), editPassword.getText().toString()); 41 | } 42 | 43 | @OnClick(R.id.txtRegister) 44 | public void goRegister() { 45 | ToastUtils.showShort(GlobalApp.getInstance().getContext(), "goRegister"); 46 | } 47 | 48 | @OnClick(R.id.txtForgetPwd) 49 | public void goForgetPwd() { 50 | ToastUtils.showShort(GlobalApp.getInstance().getContext(), "goForgetPwd"); 51 | } 52 | 53 | @Override 54 | public void showToast(String msg) { 55 | ToastUtils.showShort(GlobalApp.getInstance().getContext(), msg); 56 | } 57 | 58 | @Override 59 | public void goHome() { 60 | //跳转Home页面 61 | ToastUtils.showShort(GlobalApp.getInstance().getContext(), "登录成功, 跳转Home页面"); 62 | 63 | Intent intent = new Intent(this, HomeActivity.class); 64 | startActivity(intent); 65 | finish(); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 |