转载请注明出处 Write By xyx In CSDN @包罗万码 At 2018/10/15
原文地址:https://blog.csdn.net/a316375/article/details/83064374
implementation 'io.reactivex:rxjava:1.0.9'//rxjava
implementation 'io.reactivex:rxandroid:0.24.0'
implementation 'com.squareup.retrofit:retrofit:1.9.0'
复杂的活,简单说:
MVP顾名思义就是M,V还有P
Model负责后台数据,(这里的Mode调用了RXJAVA的方法,就是一个观察者模型)
V是一些抽象的方法,
P则把 V 跟 M 收纳为自己的成员,;
调用的时候Activity只需要实例化P并且实现V的抽象
比这个更好的是MVVM,谷歌推出了ViewModel更好的处理这些问题
说到底就是让Activity只负责绘制界面,让ViewModel去处理后台数据,
用一个Presenter来主持他们的关系,并且在Activity中实现V进行关联,达到触发事件来更新UI
--------------------------------------------------------------------------------------------------------
public class listM {
private OkHttpClient client;
public listM(){
client = new OkHttpClient();
}
public Observable<String> getlistImage(){
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(final rx.Subscriber<? super String> subscriber) {
HttpUtils.getHomeData().enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
subscriber.onError(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
String htmlStr = response.body().string();
Log.e("第二页推荐數據", htmlStr);
//byte [] data = response.body().bytes();
if(htmlStr != null){
subscriber.onNext(htmlStr);
}}
subscriber.onCompleted();
}});}});}
}
--------------------------------------------------------------------------------------------------------------------------
/**
* Created by xyx on 2017/9/16.
*/
public interface listV {
void loadImage(String ste);
void showDialog();
void disDialog();
void showError(String smg);
}
----------------------------------------------------------------------------------------------
public class listP {
private listV userView;
private listM userModel;
public listP(listV userView){
this.userView = userView;
userModel = new listM();
}
public void getUserImage(){
userView.showDialog();
userModel.getlistImage().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
userView.disDialog();
}
@Override
public void onError(Throwable e) {
userView.showError(e.getMessage());
userView.disDialog();
}
@Override
public void onNext(String bytes) {
userView.loadImage(bytes);
}});}
}
----------------------------------------------------------------------------------------------------------------------------------------
public class SecondFragment extends Fragment implements listV {
private ProgressDialog mProgressDialog;
private ArrayList<Person> mData;
private HomeListAdapter mAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.homefragment, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.homeRecyclerView);
mData = new ArrayList<Person>();
mAdapter = new HomeListAdapter(R.layout.fragment_a_listitem, mData);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(mAdapter);
listP p=new listP(this);
/**对话框**/
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("正在加载,请稍后..");
p.getUserImage();
return view;
}
@Override
public void loadImage(String string) {
if(string != null){
Gson gson = new Gson();
TuiJian list = gson.fromJson(string, new TypeToken<TuiJian>() {
}.getType());
for (int i = 0; i < list.getData().getContent().size(); i++) {
Person person = new Person(R.mipmap.ic_launcher, "20179-15", "免费", "小多的课"
, "Jike", 100 + i,list.getData().getContent().get(i).getCover().toString());
mData.add(person);
}
mAdapter.notifyDataSetChanged();
}
}
@Override
public void showDialog() {
mProgressDialog.show();
}
@Override
public void disDialog() {
mProgressDialog.hide();
}
@Override
public void showError(String smg) {
Toast.makeText(getContext(),"无法访问网络",Toast.LENGTH_SHORT).show();
}
}
-------------------------------------------------------------------------------------------------------------------------------------------.
public class HttpUtils {
public static Call getHomeData(){
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new FormBody.Builder()
.add("orgId", "15")
.build();
Request request = new Request.Builder()
.url("http://............")
.addHeader("Mk-App-Id", "21")
.addHeader("Mk-App-Sign", "9999999999")
.post(requestBody)
.build();
return client.newCall(request);
}
}
-------------------------------------------------------------
public class listBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
-----------------------------------------------------------------