MVP+Retrofit+RxJava的简单使用(仅登录模块)

首先要封装好的Retrofit工具类 —— RetrofitManager

package com.example.mvpretrofitrxjava.utils;

import java.util.concurrent.TimeUnit;

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

/**
 * Created by DELL on 2018/7/11.
 */

public class RetrofitManager {

    //设置公共的请求url
    private static String BASE_URL = "https://www.zhaoapi.cn/";
    private final Retrofit retrofit;

    private static class SingleHolder {
        private static final RetrofitManager _INSTANCE = new RetrofitManager(BASE_URL);
    }

    public static RetrofitManager getDefault() {

        return SingleHolder._INSTANCE;

    }

    private RetrofitManager(String baseUrl) {

        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(buildOkhttpClient())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

    }

    private OkHttpClient buildOkhttpClient() {

        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .build();

        return client;
    }

    public <T> T create(Class<T> Clazz) {

        return retrofit.create(Clazz);

    }
}

登录的Api —— ILoginApi:

package com.example.mvpretrofitrxjava.mvp.view.iview;

import com.example.mvpretrofitrxjava.mvp.model.bean.LoginBean;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 * Created by DELL on 2018/7/11.
 */

public interface ILoginApi {

    @GET("user/login")
    Observable<LoginBean> login(@Query("mobile") String mobile, @Query("password") String password);

}

登录回调的接口 —— ILoginView:

package com.example.mvpretrofitrxjava.mvp.view.iview;

import com.example.mvpretrofitrxjava.mvp.model.bean.LoginBean;

/**
 * Created by DELL on 2018/7/11.
 */

public interface ILoginView {

    void onLoginSuccess(LoginBean loginBean);

    void onLoginFailed(String error);

}

随后就是Model层 —— LoginModel:

package com.example.mvpretrofitrxjava.mvp.model;

import com.example.mvpretrofitrxjava.mvp.model.bean.LoginBean;
import com.example.mvpretrofitrxjava.mvp.view.iview.ILoginApi;
import com.example.mvpretrofitrxjava.utils.RetrofitManager;

import io.reactivex.Observable;

/**
 * Created by DELL on 2018/7/11.
 */

public class LoginModel {

    public Observable<LoginBean> login(String mobile, String password) {

        return RetrofitManager.getDefault().create(ILoginApi.class).login(mobile, password);

    }

}

Presenter层 —— LoginPresenter:

package com.example.mvpretrofitrxjava.mvp.presenter;

import com.example.mvpretrofitrxjava.mvp.model.LoginModel;
import com.example.mvpretrofitrxjava.mvp.model.bean.LoginBean;
import com.example.mvpretrofitrxjava.mvp.view.iview.ILoginView;

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

/**
 * Created by DELL on 2018/7/11.
 */

public class LoginPresenter {

    private LoginModel loginModel;
    ILoginView mILoginView;

    public LoginPresenter(ILoginView loginView) {

        mILoginView = loginView;
        loginModel = new LoginModel();

    }

    public void login(String mobile, String password) {

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

                    }

                    @Override
                    public void onNext(LoginBean loginBean) {
                        if (mILoginView != null) {
                            mILoginView.onLoginSuccess(loginBean);
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        if (mILoginView != null) {
                            mILoginView.onLoginFailed(e.toString());
                        }
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

}

最后是MainActivity中的代码:

package com.example.mvpretrofitrxjava.mvp.view.activity;

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

import com.example.mvpretrofitrxjava.R;
import com.example.mvpretrofitrxjava.mvp.model.bean.LoginBean;
import com.example.mvpretrofitrxjava.mvp.presenter.LoginPresenter;
import com.example.mvpretrofitrxjava.mvp.view.iview.ILoginView;

public class MainActivity extends AppCompatActivity implements ILoginView {

    private LoginPresenter presenter;

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

        presenter = new LoginPresenter(this);
    }

    public void login(View view) {

        presenter.login("15201161615", "123456");

    }

    @Override
    public void onLoginSuccess(final LoginBean loginBean) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "登录成功" + loginBean.getData().getMobile(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public void onLoginFailed(final String error) {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "登录失败" + error, Toast.LENGTH_SHORT).show();
            }
        });

    }
}

写在最后:只是简单的利用MVP+Retrofit+RxJava框架实现了登录功能,不喜勿喷!!!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
完整项目配置涉及到以下步骤: 1. 在项目的 `build.gradle` 文件中添加RxJavaRetrofitMVP相关依赖: ```groovy dependencies { // RxJava implementation 'io.reactivex.rxjava2:rxjava:2.2.21' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // Retrofit implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0' // MVP implementation 'com.hannesdorfmann.mosby3:mvp:3.2.0' } ``` 2. 在你的AndroidManifest.xml文件中添加网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 3. 创建网络请求接口,例如创建一个名为ApiService的接口,如前面所示。 4. 创建网络请求管理类和Presenter层,如前面所示。 5. 创建View层,如前面所示。 6. 最后,在MainActivity中初始化Presenter,并调用fetchData()方法来执行网络请求。 ```java public class MainActivity extends AppCompatActivity implements MainView { private MainPresenter mainPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainPresenter = new MainPresenter(this); mainPresenter.fetchData(); } @Override public void showData(ResponseData responseData) { // 展示数据到UI上 } @Override public void showError(String errorMessage) { // 展示错误信息到UI上 } } ``` 这样,你就完成了Android使用RxJavaRetrofitMVP进行网络请求的框架封装。根据你的实际需求,你可以进一步添加其他功能和模块来完善你的项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值