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