初次接触MVP架构 --简易版模板

MVP实现简单网络请求

包模板:
在这里插入图片描述
代码:
ICallBack:

package com.example.new_code_structure_learning1.model;

public interface ICallBack {
    void ok(String responseData);
}

IWebModel:

package com.example.new_code_structure_learning1.model;

public interface IWebModel {
    void getRequest(String url,ICallBack iCallBack);
}

WebModel:

package com.example.new_code_structure_learning1.model;

import java.io.IOException;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class WebModel implements IWebModel {
    @Override
    public void getRequest(final String url,final ICallBack iCallBack) {
        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                e.onNext(sendInternetRequest(url));
            }
        })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {
                        iCallBack.ok(s);
                    }
                });
    }

    private String sendInternetRequest(String url) {
        String responseData = null;
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(url)
                    .build();
            Response response = client.newCall(request).execute();
            responseData=response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return responseData;
    }
}

Presenter:

package com.example.new_code_structure_learning1.presenter;

import com.example.new_code_structure_learning1.model.ICallBack;
import com.example.new_code_structure_learning1.model.WebModel;
import com.example.new_code_structure_learning1.view.IWebView;


public class Presenter {
    private WebModel webModel;
    private IWebView iWebView;

    public Presenter(){
        webModel=new WebModel();
    }

    public void onDestroy(){
        iWebView=null;
    }

    public void attachView(IWebView iWebView){
        this.iWebView=iWebView;
    }

    public void StartRequest(String url){
        iWebView.showProgress();
        webModel.getRequest(url, new ICallBack() {
            @Override
            public void ok(String responseData) {
                iWebView.showText(responseData);
            }
        });
    }
}

IWebView:

package com.example.new_code_structure_learning1.view;

public interface IWebView {
    void showText(String responseData);
    void showProgress();
}

MainActivity(WebView):

package com.example.new_code_structure_learning1.view;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.example.new_code_structure_learning1.R;
import com.example.new_code_structure_learning1.presenter.Presenter;

public class MainActivity extends AppCompatActivity implements IWebView{
    private TextView m_text;
    private Presenter m_presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        m_text=(TextView)findViewById(R.id.show);
        m_presenter=new Presenter();
        m_presenter.attachView(MainActivity.this);
        m_presenter.StartRequest("https://www.baidu.com");
    }

    @Override
    public void showText(String responseData) {
        m_text.setText(responseData);
    }

    @Override
    public void showProgress() {
        Toast.makeText(MainActivity.this,"Data is loading",Toast.LENGTH_SHORT).show();
    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tran_sient

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值