初次接觸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();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章