MVP+RXAndroid/RXJava

转载请注明出处 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;

}

}

-----------------------------------------------------------------

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值