接口
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxandroid:1.2.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
compile 'com.facebook.fresco:fresco:0.12.0'
RetrofitService类
package com.example.administrator.mvpdemo.service;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;
/**
* Created by win764-1 on 2016/12/12.
*/
public interface RetrofitService {
@GET("huabian/?key=71e58b5b2f930eaf1f937407acde08fe")
Observable<Book> getcall(@Query("num") String num);
//请求方式
//
//http://api.tianapi.com/huabian/?key=71e58b5b2f930eaf1f937407acde08fe&num
// @GET("book/search")
// //Observable
// //@Query() ?后面用它去拼接
// //@QueryMap ?后面拼接数组用的
// /* @Path:所有在网址中的参数(URL的问号前面),如:
// http://102.10.10.132/api/Accounts/{accountId}
// @Query:URL问号后面的参数,如:
// http://102.10.10.132/api/Comments?access_token={access_token}
// @QueryMap:相当于多个@Query
// @Field:用于POST请求,提交单个数据
// @Body:相当于多个@Field,以对象的形式提交
//*/
//
// Observable<Book> getSearchBooks(@Query("q") String name,
// @Query("tag") String tag, @Query("start") int start,
// @Query("count") int count);
}
RetrofitHelper类
import android.content.Context;
import com.google.gson.GsonBuilder;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitHelper {
private Context mCntext;
//初始化
OkHttpClient client = new OkHttpClient();
//gson工厂
GsonConverterFactory factory = GsonConverterFactory.create(new GsonBuilder().create());
private static RetrofitHelper instance = null;
private Retrofit mRetrofit = null;
//单例模式
public static RetrofitHelper getInstance(Context context){
if (instance == null){
instance = new RetrofitHelper(context);
}
return instance;
}
private RetrofitHelper(Context mContext){
mCntext = mContext;
init();
}
private void init() {
resetApp();
}
private void resetApp() {
//初始化retrofit
mRetrofit = new Retrofit.Builder()
.baseUrl("http://api.tianapi.com/")
.client(client)
.addConverterFactory(factory)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
public RetrofitService getServer(){
return mRetrofit.create(RetrofitService.class);
}
}
DataManager类
package com.example.administrator.mvpdemo.service.manager;
import android.content.Context;
import com.example.administrator.mvpdemo.service.RetrofitHelper;
import com.example.administrator.mvpdemo.service.RetrofitService;
import com.example.administrator.mvpdemo.service.entity.Book;
import rx.Observable;
/**
* Created by win764-1 on 2016/12/12.
*/
public class DataManager {
private RetrofitService mRetrofitService;
//构造器里获取RetrofitService
public DataManager(Context context){
this.mRetrofitService = RetrofitHelper.getInstance(context).getServer();
}
//网络请求方法getSearchBooks
public Observable<Book> getcall(String num){
return mRetrofitService.getcall(num);
}
}
Model类
package com.example.administrator.mvpdemo.service.model;
import android.content.Context;
import android.util.Log;
import com.example.administrator.mvpdemo.service.entity.Book;
import com.example.administrator.mvpdemo.service.manager.DataManager;
import com.example.administrator.mvpdemo.service.presenter.Presenter;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* author:Created by MingShao on 2018/1/30.
*/
public class Model {
private Context mContext;
public Model( Context mContext) {
this.mContext = mContext;
}
public void getSearchBooks(String num, final Presenter presenter){
DataManager manager = new DataManager(mContext);
CompositeSubscription mCompositeSubscription = new CompositeSubscription();
mCompositeSubscription.add(
//observerble 被观察者
manager.getcall(num)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//订阅
.subscribe(
//观察者
new Observer<Book>() {
@Override
public void onCompleted() {
Log.d("xxx", "onCompleted: "+"onCompleted");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Book book) {
Log.d("jiba", "onNext: "+book.toString());
presenter.getModelData(book);
}
})
);
}
}
P层接口
public interface Presenter {
void getModelData(Book book);
}
P层
public class BookPresenter implements Presenter{
private MainActivity mContext;
Model model;
public BookPresenter (MainActivity mContext){
this.mContext = mContext;
model = new Model(mContext);
}
public void getSearchBooks(String num){
model.getSearchBooks(num+"",this);
}
@Override
public void getModelData(Book book) {
mContext.onSuccess(book);
}
public void ondestroy(){
mContext=null;
}
}
V层接口
public interface BookView extends View {
void onSuccess(Book mBook);
void onError(String result);
}
public interface View {
void getPresenterData(Book book);
}
V层
package com.example.administrator.mvpdemo.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.example.administrator.mvpdemo.R;
import com.example.administrator.mvpdemo.service.OnItemClickListener;
import com.example.administrator.mvpdemo.service.entity.Book;
import com.example.administrator.mvpdemo.service.presenter.BookPresenter;
import com.example.administrator.mvpdemo.service.view.BookView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.List;
import rx.subscriptions.CompositeSubscription;
public class MainActivity extends AppCompatActivity implements BookView{
private Button button;
//view 中初始化presenter对象
private BookPresenter mBookPresenter = new BookPresenter(this);
private XRecyclerView xre;
private int i = 20;
private Adapter adapter;
private List<Book.NewslistBean> newslist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xre=(XRecyclerView) findViewById(R.id.xre);
button = (Button)findViewById(R.id.button);
xre.setPullRefreshEnabled(true);
xre.setLoadingMoreEnabled(true);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "哈哈哈", Toast.LENGTH_SHORT).show();
mBookPresenter.getSearchBooks(i+"");
}
});
xre.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
getDat(i);
// 刷新完成
xre.refreshComplete();
newslist.clear();
}
@Override
public void onLoadMore() {
i++;
getDat(i);
// 刷新完成
xre.loadMoreComplete();
}
});
}
private void getDat(int i) {
mBookPresenter.getSearchBooks(20+"");
}
@Override
protected void onStop() {
CompositeSubscription compositeSubscription = new CompositeSubscription();
compositeSubscription.unsubscribe();
super.onStop();
}
@Override
protected void onDestroy(){
mBookPresenter.ondestroy();
super.onDestroy();
}
@Override
public void onSuccess(Book mBook) {
Log.d("zzz", "onSuccess: "+mBook.toString());
newslist = mBook.getNewslist();
adapter = new Adapter(newslist,this);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
xre.setLayoutManager(linearLayoutManager);
xre.setAdapter(adapter);
adapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onClick(int position) {
Toast.makeText(MainActivity.this, ""+ newslist.get(position).getUrl(), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("url", newslist.get(position).getUrl());
startActivity(intent);
}
@Override
public void onLongClick(int position) {
}
});
// if (adapter==null){
//
// }else{
// adapter.notifyDataSetChanged();
// }
}
@Override
public void onError(String result) {
}
@Override
public void getPresenterData(Book book) {
}
}