MVP+Retrafit+Okhttp+inject登录

<uses-permission android:name="android.permission.INTERNET"/>

implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation  "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
implementation "io.reactivex.rxjava2:rxjava:2.1.13"
implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
implementation 'com.youth.banner:banner:1.4.9'
implementation "com.google.dagger:dagger:2.8"
annotationProcessor 'com.google.dagger:dagger-compiler:2.7'

bean

UserBean

package com.example.asus.yd1512qjddemo.bean;

public class UserBean {

    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"032860bad4c453c0","appsecret":"D1D54601A094983A38000563A1ECC720","createtime":"2018-05-21T22:11:47","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"15133044161","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"C55773B10ABD8BFB6739BD5C16D6F803","uid":11068,"userId":null,"username":"15133044161"}
     */

    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 : 032860bad4c453c0
         * appsecret : D1D54601A094983A38000563A1ECC720
         * createtime : 2018-05-21T22:11:47
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : null
         * latitude : null
         * longitude : null
         * mobile : 15133044161
         * money : null
         * nickname : null
         * password : 8F669074CAF5513351A2DE5CC22AC04C
         * praiseNum : null
         * token : C55773B10ABD8BFB6739BD5C16D6F803
         * uid : 11068
         * userId : null
         * username : 15133044161
         */

        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 Object 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 Object getIcon() {
            return icon;
        }

        public void setIcon(Object 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;
        }
    }
}
 
component
HttpComponent
 
package com.example.asus.yd1512qjddemo.component;


import com.example.asus.yd1512qjddemo.model.HttpModule;
import com.example.asus.yd1512qjddemo.ui.login.LoginActivity;

import dagger.Component;

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

inter
IBase
 

package com.example.asus.yd1512qjddemo.inter;

import android.view.View;

public interface IBase {
    int getContentLayout();
    void inject();
    void initView(View view);
}
model
HttpModule
 
package com.example.asus.yd1512qjddemo.model;

import com.example.asus.yd1512qjddemo.net.Api;
import com.example.asus.yd1512qjddemo.net.LoginApi;
import com.example.asus.yd1512qjddemo.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;

@Module
public class HttpModule {

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

    @Provides
    LoginApi provideLoginApi(OkHttpClient.Builder builder){
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(Api.LoginApiUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(builder.build())
                .build();
        LoginApiService service = retrofit.create(LoginApiService.class);
        return LoginApi.getLoginApi(service);
    }
}

net

Api

package com.example.asus.yd1512qjddemo.net;

public interface Api {
    String LoginApiUrl="https://www.zhaoapi.cn/";
}
 

LoginApi

package com.example.asus.yd1512qjddemo.net;

import com.example.asus.yd1512qjddemo.bean.UserBean;

import io.reactivex.Observable;

public class LoginApi {
    private static LoginApi loginApi;
    private LoginApiService loginApiService;

    public 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);
    }
}
 

LoginApiService

package com.example.asus.yd1512qjddemo.net;

import com.example.asus.yd1512qjddemo.bean.UserBean;

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

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

ui

 base

BaseActivity

package com.example.asus.yd1512qjddemo.ui.base;

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

import com.example.asus.yd1512qjddemo.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(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentLayout());
        inject();
        //绑定
        mPresenter.attchView(this);
    }

    @Override
    public void initView(View view) {

    }

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

    public void showLoading(){

    }
    public void dismissLoading(){

    }
}
 

BaseContract

package com.example.asus.yd1512qjddemo.ui.base;

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.asus.yd1512qjddemo.ui.base;


import com.example.asus.yd1512qjddemo.ui.login.contract.LoginContract;

//所有Presenter的积累,实现了BaseContract.BasePresenter接口
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;
        }
    }
}

login
contract
LoginContract
 
package com.example.asus.yd1512qjddemo.ui.login.contract;


import com.example.asus.yd1512qjddemo.bean.UserBean;
import com.example.asus.yd1512qjddemo.ui.base.BaseContract;

public interface LoginContract {
    interface View  extends BaseContract.BaseView{
        //成功
        void loginSuccess(UserBean userBean);
    }
    interface Presenter extends BaseContract.BasePresenter<View>{
        //登录
        void login(String mobile,String password);
    }
}

presenter

LoginPresenter

package com.example.asus.yd1512qjddemo.ui.login.presenter;

import com.example.asus.yd1512qjddemo.bean.UserBean;
import com.example.asus.yd1512qjddemo.net.LoginApi;
import com.example.asus.yd1512qjddemo.ui.base.BasePresenter;
import com.example.asus.yd1512qjddemo.ui.login.contract.LoginContract;

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 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) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

LoginActivity

package com.example.asus.yd1512qjddemo.ui.login;

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

import com.example.asus.yd1512qjddemo.R;
import com.example.asus.yd1512qjddemo.bean.UserBean;
import com.example.asus.yd1512qjddemo.component.DaggerHttpComponent;
import com.example.asus.yd1512qjddemo.model.HttpModule;
import com.example.asus.yd1512qjddemo.ui.base.BaseActivity;
import com.example.asus.yd1512qjddemo.ui.login.contract.LoginContract;
import com.example.asus.yd1512qjddemo.ui.login.presenter.LoginPresenter;


public class LoginActivity extends BaseActivity<LoginPresenter>  implements LoginContract.View, View.OnClickListener {

    private EditText mEdMobile;
    private EditText mEdPassword;
    /**
     * 登录
     */
    private Button mBtButton;

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


    @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_LONG).show();
    }

    private void initView() {
        mEdMobile = (EditText) findViewById(R.id.ed_mobile);
        mEdPassword = (EditText) findViewById(R.id.ed_password);
        mBtButton = (Button) findViewById(R.id.bt_button);
        mBtButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.bt_button:
                String mobile = mEdMobile.getText().toString();
                String password = mEdPassword.getText().toString();
                mPresenter.login(mobile,password);
                break;
        }
    }
}
 

MainActivity

package com.example.asus.yd1512qjddemo.ui;

import android.os.Bundle;

import com.example.asus.yd1512qjddemo.R;
import com.example.asus.yd1512qjddemo.ui.base.BaseActivity;
import com.example.asus.yd1512qjddemo.ui.base.BasePresenter;
import com.example.asus.yd1512qjddemo.ui.login.contract.LoginContract;

public class MainActivity extends BaseActivity {

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

    }

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

    @Override
    public void inject() {

    }
}
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"
    android:orientation="vertical"
    tools:context=".ui.login.LoginActivity">

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

    <Button
        android:id="@+id/bt_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"/>

</LinearLayout>

 


build


很重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值