MVP注册

 
 
//有些我们不需要
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 获取wifi状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 改变wifi状态 -->
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读取sd卡 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<!-- 获取电池信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!-- 设置系统权限 -->
<uses-permission android:name="android.permission.GET_TASKS"/>
<!-- 设置系统权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- 电源锁权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- 允许应用写(非读)用户的日历数据 -->
<uses-permission android:name="android.permission.VIBRATE"/>
<!-- 允许应用访问震动器 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
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"]
implementation 'com.facebook.fresco:fresco:0.12.0'
// 支持 GIF 动图,需要添加
implementation 'com.facebook.fresco:animated-gif:0.12.0'
implementation 'com.android.support:support-v4:27.1.1'

activity_register.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"
    android:orientation="vertical"
    tools:context=".ui.register.RegisterActivity">

    <EditText
        android:id="@+id/etMobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/etPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册"/>
</LinearLayout>


bean

RegisterBean

package com.example.a1512qmvp2.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;
    }
}
 
 

component

HttpComponent

package com.example.a1512qmvp2.component;

import com.example.a1512qmvp2.module.HttpModule;
import com.example.a1512qmvp2.ui.register.RegisterActivity;

import dagger.Component;

@Component(modules = HttpModule.class)
public interface HttpComponent {
    void inject(RegisterActivity registerActivity);
}
 
 

inter

IBase

package com.example.a1512qmvp2.inter;

public interface IBase {
    int getContentLayout();

    void inject();
}
 
 

module

HttpModule

package com.example.a1512qmvp2.module;

import com.example.a1512qmvp2.net.RegisterApi;
import com.example.a1512qmvp2.net.RegisterApiService;

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;

@Module
public class HttpModule {

    @Provides
    OkHttpClient.Builder provideOkHttpClientBuilder() {
        return new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .writeTimeout(20, TimeUnit.SECONDS);
    }

    @Provides
    RegisterApi provideRegisterApi(OkHttpClient.Builder builder) {
        RegisterApiService registerApiService = new Retrofit.Builder()
                .baseUrl("https://www.zhaoapi.cn/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(builder.build())
                .build()
                .create(RegisterApiService.class);

        return RegisterApi.getRegisterApi(registerApiService);
    }

}
 
 

net

RegisterApi

package com.example.a1512qmvp2.net;

import com.example.a1512qmvp2.bean.RegisterBean;

import io.reactivex.Observable;

public class RegisterApi {
    private static RegisterApi registerApi;
    private RegisterApiService registerApiService;

    private RegisterApi(RegisterApiService registerApiService) {
        this.registerApiService = registerApiService;
    }

    public static RegisterApi getRegisterApi(RegisterApiService registerApiService) {
        if (registerApi == null) {
            registerApi = new RegisterApi(registerApiService);
        }
        return registerApi;
    }

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

RegisterApiService

package com.example.a1512qmvp2.net;

import com.example.a1512qmvp2.bean.RegisterBean;

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

public interface RegisterApiService {

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

ui

base

BaseActivity

package com.example.a1512qmvp2.ui.base;

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

import com.example.a1512qmvp2.inter.IBase;

import javax.inject.Inject;

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.attachView(this);
    }

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

    @Override
    public void showLoading() {

    }

    @Override
    public void dimissLoading() {

    }
}
 
 

BaseContract

package com.example.a1512qmvp2.ui.base;

public interface BaseContract {
    interface BasePresenter<T extends BaseView> {
        void attachView(T view);

        void detachView();
    }


    interface BaseView {
        void showLoading();

        void dimissLoading();
    }
}
 
 

BasePresenter

package com.example.a1512qmvp2.ui.base;

public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {
    protected T mView;

    @Override
    public void attachView(T view) {
        this.mView = view;
    }

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

}
 
 

register

contract

RegisterContract

package com.example.a1512qmvp2.ui.register.contract;

import com.example.a1512qmvp2.ui.base.BaseContract;

public interface RegisterContract {
    interface View extends BaseContract.BaseView {
        void registerSuccess();
    }

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

presenter

RegisterPresenter

package com.example.a1512qmvp2.ui.register.presenter;

import com.example.a1512qmvp2.bean.RegisterBean;
import com.example.a1512qmvp2.net.RegisterApi;
import com.example.a1512qmvp2.ui.base.BasePresenter;
import com.example.a1512qmvp2.ui.register.contract.RegisterContract;

import javax.inject.Inject;

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

public class RegisterPresenter extends BasePresenter<RegisterContract.View> implements RegisterContract.Presenter {
    RegisterApi registerApi;
    @Inject
    public RegisterPresenter(RegisterApi registerApi) {
        this.registerApi = registerApi;
    }

    @Override
    public void register(String mobile, String password) {
        registerApi.register(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.registerSuccess();
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}
 
 

RegisterActivity

package com.example.a1512qmvp2.ui.register;

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

import com.example.a1512qmvp2.R;
import com.example.a1512qmvp2.component.DaggerHttpComponent;
import com.example.a1512qmvp2.module.HttpModule;
import com.example.a1512qmvp2.ui.base.BaseActivity;
import com.example.a1512qmvp2.ui.register.contract.RegisterContract;
import com.example.a1512qmvp2.ui.register.presenter.RegisterPresenter;

public class RegisterActivity extends BaseActivity<RegisterPresenter> implements RegisterContract.View, View
        .OnClickListener {

    private EditText mEtMobile;
    private EditText mEtPassword;
    /**
     * 注册
     */
    private Button mBt;

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

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

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

    @Override
    public void registerSuccess() {
        Toast.makeText(RegisterActivity.this, "注册回调了", Toast.LENGTH_SHORT).show();
    }

    private void initView() {
        mEtMobile = (EditText) findViewById(R.id.etMobile);
        mEtPassword = (EditText) findViewById(R.id.etPassword);
        mBt = (Button) findViewById(R.id.bt);
        mBt.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt:
                String mobile = mEtMobile.getText().toString();
                String password = mEtPassword.getText().toString();
                mPresenter.register(mobile, password);
                break;
        }
    }
}
MainActivity
 
 
package com.example.a1512qmvp2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

 
 


猜你喜欢

转载自blog.csdn.net/zhang1223665986/article/details/80417119
MVP