MPV框架 登录 注册

导依赖

config.gradle

ext {
    android = [
            compileSdkVersion: 27,
            applicationId    : "com.example.administrator.myapplication",
            minSdkVersion    : 15,
            targetSdkVersion : 27,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    dependencies = [
            "appcompat-v7"     : "com.android.support:appcompat-v7:27.1.1",
            "constraint-layout": "com.android.support.constraint:constraint-layout:1.1.0",
            "retrofit2"        : "com.squareup.retrofit2:retrofit:2.4.0",
            "converter-gson"   : "com.squareup.retrofit2:converter-gson:2.4.0",
            "adapter-rxjava"  :  "com.squareup.retrofit2:adapter-rxjava2:2.4.0",
            "rxjava2"          : "io.reactivex.rxjava2:rxjava:2.1.13",
            "rxjava2:rxandroid": "io.reactivex.rxjava2:rxandroid:2.0.2",
            "dagger"           : "com.google.dagger:dagger:2.8",
            "dagger-compiler" : "com.google.dagger:dagger-compiler:2.7"

    ]
}

在主build.gradle中加入一句话

apply from: "config.gradle"

在工程里build.gradle中全部替换成

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    defaultConfig {
        applicationId rootProject.ext.android.applicationId
        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation rootProject.ext.dependencies["appcompat-v7"]
    implementation rootProject.ext.dependencies["constraint-layout"]
    implementation rootProject.ext.dependencies["retrofit2"]
    implementation rootProject.ext.dependencies["converter-gson"]
    implementation rootProject.ext.dependencies["rxjava2"]
    implementation rootProject.ext.dependencies["rxjava2:rxandroid"]
    implementation rootProject.ext.dependencies["dagger"]
    annotationProcessor rootProject.ext.dependencies["dagger-compiler"]
    implementation rootProject.ext.dependencies["adapter-rxjava"]
}
 

base包

BaseActivity类

package com.example.administrator.myapplication.base;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import com.example.administrator.myapplication.inter.IBase;

import javax.inject.Inject;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public abstract class BaseActivity<T extends BaseContract.BasePresenter> extends AppCompatActivity implements IBase,BaseContract.BaseView{
   @Inject
    protected T mPresenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentLayout());
        inject();
        mPresenter.attchView(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detachView();
    }

    @Override
    public void showLoading() {

    }

    @Override
    public void dismissLoading() {

    }
}
BaseContract接口
package com.example.administrator.myapplication.base;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public interface BaseContract {
    //抽取所有presenter的共性,例如绑定、解绑
    interface BasePresenter<T extends BaseView>{
        void attchView(T view);
        void detachView();
    }
    //抽取所有view共性、例如显示进度条和关闭进度
    interface BaseView{
        void showLoading();
        void dismissLoading();
    }
}
 
BasePresenter类
package com.example.administrator.myapplication.base;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {
   protected T mView;
    @Override
    public void attchView(T view) {
        this.mView=view;
    }

    @Override
    public void detachView() {
        if (mView!=null){
            mView=null;
        }
    }
}
 

inter包

package com.example.administrator.myapplication.inter;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public interface IBase {
    int getContentLayout();
    void inject();
}
login包
LoginActivity类
package com.example.administrator.myapplication.login;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.administrator.myapplication.R;
import com.example.administrator.myapplication.base.BaseActivity;
import com.example.administrator.myapplication.bean.UserBean;
import com.example.administrator.myapplication.component.DaggerHttpComponent;
import com.example.administrator.myapplication.module.HttpModule;
import com.example.administrator.myapplication.reg.RegActivity;

import dagger.internal.DaggerCollections;

public class LoginActivity extends BaseActivity<LoginPresenter> implements LoginContract.view {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initView();
    }

   /* public void inject(){
        DaggerHttpComponent.builder()
                .httpModule(new HttpModule())
                .build()
                .inject(this);
    }*/

    private void initView() {
        final EditText et_mobile = findViewById(R.id.et_mobile);
        final EditText et_pass = findViewById(R.id.et_pass);
        Button login = findViewById(R.id.login);
        Button reg = findViewById(R.id.reg);
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String mobile = et_mobile.getText().toString();
                String pass = et_pass.getText().toString();
                mPresenter.login(mobile,pass);
            }
        });

        reg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this, RegActivity.class);
                startActivity(intent);

            }
        });
    }

    @Override
    public int getContentLayout() {
        return R.layout.activity_login;
    }

    @Override
    public void inject() {
        DaggerHttpComponent.builder()
                .httpModule(new HttpModule())
                .build()
                .inject(this);
    }

    @Override
    public void loginSuccess(UserBean userBean) {
        Toast.makeText(LoginActivity.this, userBean.getMsg(), Toast.LENGTH_SHORT).show();
    }
}
 
LoginContract接口
package com.example.administrator.myapplication.login;

import android.view.View;

import com.example.administrator.myapplication.base.BaseContract;
import com.example.administrator.myapplication.bean.UserBean;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public interface LoginContract {
    interface view extends BaseContract.BaseView{
        void loginSuccess(UserBean userBean);
    }
    interface presenter extends BaseContract.BasePresenter<view> {
        void login(String mobile, String password);

    }
}

LoginPresenter类

package com.example.administrator.myapplication.login;

import android.util.Log;
import android.widget.Toast;

import com.example.administrator.myapplication.base.BasePresenter;
import com.example.administrator.myapplication.bean.UserBean;
import com.example.administrator.myapplication.net.LoginApi;

import javax.inject.Inject;

import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public class LoginPresenter extends BasePresenter<LoginContract.view> implements LoginContract.presenter {
  private LoginApi loginApi;
   @Inject
    public LoginPresenter(LoginApi loginApi) {
       this.loginApi=loginApi;
    }

    @Override
    public void login(String mobile, String password) {
        loginApi.login(mobile,password)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<UserBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(UserBean userBean) {
                    mView.loginSuccess(userBean);
                    }

                    @Override
                    public void onError(Throwable e) {
                       // Toast.makeText(LoginPresenter.this,"", Toast.LENGTH_SHORT).show();
                        Log.e("zzz","错误");
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

net包

package com.example.administrator.myapplication.net;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public interface API {
    String BASEURL="https://www.zhaoapi.cn/";

}
 
package com.example.administrator.myapplication.net;

import com.example.administrator.myapplication.bean.RegisterBean;
import com.example.administrator.myapplication.bean.UserBean;

import io.reactivex.Observable;
import retrofit2.http.Field;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public class LoginApi {
    private static LoginApi loginApi;
    private LoginApiService loginApiService;
    private LoginApi(LoginApiService loginApiService) {
        this.loginApiService=loginApiService;
    }

    public static LoginApi getLoginApi(LoginApiService loginApiService){
        if (loginApi==null){
           loginApi=new LoginApi(loginApiService);
        }
        return loginApi;
    }

    public Observable<UserBean> login( String mobile, String password){
       return loginApiService.login(mobile,password);
    }

    public Observable<RegisterBean> reg(String mobile, String password) {
        return loginApiService.reg(mobile, password);
    }

}

 
package com.example.administrator.myapplication.net;

import com.example.administrator.myapplication.bean.RegisterBean;
import com.example.administrator.myapplication.bean.UserBean;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by Administrator on 2018/5/8 0008.
 */

public interface LoginApiService {
    @FormUrlEncoded
    @POST("user/login")
    Observable<UserBean> login(@Field("mobile") String mobile,
                               @Field("password") String password);

    @FormUrlEncoded
    @POST("user/reg")
    Observable<RegisterBean> reg(@Field("mobile") String mobile,
                                   @Field("password") String password);

}

component包 

package com.example.administrator.myapplication.component;

import com.example.administrator.myapplication.login.LoginActivity;
import com.example.administrator.myapplication.module.HttpModule;
import com.example.administrator.myapplication.reg.RegActivity;

import dagger.Component;

/**
 * Created by Administrator on 2018/5/8 0008.
 */
@Component(modules = HttpModule.class)
public interface HttpComponent {
    void inject(LoginActivity loginActivity);
    void inject(RegActivity regActivity);
}


module包

package com.example.administrator.myapplication.module;

import com.example.administrator.myapplication.net.API;
import com.example.administrator.myapplication.net.LoginApi;
import com.example.administrator.myapplication.net.LoginApiService;

import java.util.concurrent.TimeUnit;

import dagger.Module;
import dagger.Provides;
import okhttp3.OkHttpClient;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by Administrator on 2018/5/8 0008.
 */
@Module
public class HttpModule {
    @Provides
    LoginApi provideLoginApi(){

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .writeTimeout(20, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .connectTimeout(10, TimeUnit.SECONDS)
                .build();

        Retrofit retrofit = new Retrofit.Builder().baseUrl(API.BASEURL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();
        LoginApiService loginApiService = retrofit.create(LoginApiService.class);
        return LoginApi.getLoginApi(loginApiService);


    }
}


reg注册包

package com.example.administrator.myapplication.reg;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.administrator.myapplication.R;
import com.example.administrator.myapplication.base.BaseActivity;
import com.example.administrator.myapplication.component.DaggerHttpComponent;
import com.example.administrator.myapplication.module.HttpModule;

public class RegActivity extends BaseActivity<RegPresenter> implements View.OnClickListener,RegContract.View {

    private EditText mEtMobile;
    private EditText mEtPass;
    /**
     * 确定注册
     */
    private Button mQureg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initView();
    }

    @Override
    public int getContentLayout() {
        return R.layout.activity_reg;
    }

    @Override
    public void inject() {
        DaggerHttpComponent.builder()
                .httpModule(new HttpModule())
                .build()
                .inject(this);
    }

    private void initView() {
        mEtMobile = (EditText) findViewById(R.id.et_mobile);
        mEtPass = (EditText) findViewById(R.id.et_pass);
        mQureg = (Button) findViewById(R.id.qureg);
        mQureg.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.qureg:
                String mobile = mEtMobile.getText().toString();
                String password = mEtPass.getText().toString();
                mPresenter.reg(mobile, password);
                break;
        }
    }

    @Override
    public void regSuccess() {
        Toast.makeText(RegActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
        finish();
    }
}


package com.example.administrator.myapplication.reg;

import com.example.administrator.myapplication.base.BaseContract;

/**
 * Created by Administrator on 2018/5/9 0009.
 */

public interface RegContract {
    interface View extends BaseContract.BaseView {
        void regSuccess();
    }

    interface Presenter extends BaseContract.BasePresenter<View> {
        void reg(String mobile, String password);
    }
}


package com.example.administrator.myapplication.reg;

import com.example.administrator.myapplication.base.BasePresenter;
import com.example.administrator.myapplication.bean.RegisterBean;
import com.example.administrator.myapplication.net.LoginApi;

import javax.inject.Inject;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

/**
 * Created by Administrator on 2018/5/9 0009.
 */

public class RegPresenter extends BasePresenter<RegContract.View>implements RegContract.Presenter{
    LoginApi loginApi;
    @Inject
    public RegPresenter(LoginApi loginApi) {
        this.loginApi=loginApi;
    }

    @Override
    public void reg(String mobile, String password) {
        loginApi.reg(mobile,password)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Observer<RegisterBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(RegisterBean registerBean) {
                        mView.regSuccess();
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}


bean包

package com.example.administrator.myapplication.bean;

import java.io.Serializable;

public class RegisterBean implements Serializable {

    /**
     * msg : 注册成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}



package com.example.administrator.myapplication.bean;

public class UserBean {

    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"07258a7bbfd8b132","appsecret":"E243E12B205A861F4BBC0492A373A36F",
     * "createtime":"2018-05-08T09:34:26","email":null,"fans":null,"follow":null,"gender":null,"icon":"https://www
     * .zhaoapi.cn/images/1525392292327header_crop.jpg","latitude":null,"longitude":null,"mobile":"18310830365",
     * "money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,
     * "token":"5B5E60DC8960BA6DBCF3CBA638A1EC32","uid":1235,"userId":null,"username":"18310830365"}
     */

    private String msg;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * age : null
         * appkey : 07258a7bbfd8b132
         * appsecret : E243E12B205A861F4BBC0492A373A36F
         * createtime : 2018-05-08T09:34:26
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : https://www.zhaoapi.cn/images/1525392292327header_crop.jpg
         * latitude : null
         * longitude : null
         * mobile : 18310830365
         * money : null
         * nickname : null
         * password : 8F669074CAF5513351A2DE5CC22AC04C
         * praiseNum : null
         * token : 5B5E60DC8960BA6DBCF3CBA638A1EC32
         * uid : 1235
         * userId : null
         * username : 18310830365
         */

        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private String icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public String getIcon() {
            return icon;
        }

        public void setIcon(String icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public Object getNickname() {
            return nickname;
        }

        public void setNickname(Object nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.myapplication.login.LoginActivity"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_mobile"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_pass"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/login"
        android:text="登录"
        android:layout_weight="1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/reg"
            android:layout_weight="1"
            android:text="注册"/>
    </LinearLayout>
</LinearLayout>
activity_reg.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.myapplication.reg.RegActivity"
    android:orientation="vertical">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_mobile"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/et_pass"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/qureg"
        android:text="确定注册"/>
</LinearLayout>

最后加权限








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值