您的位置:首页 > 理论基础 > 计算机网络

MVP+Retrofit+Okhttp+RxJava

2017-12-05 14:47 323 查看

App的build.gradle依赖包:

          compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

接口地址类:

public class API {

//接口:APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’ http://api.tianapi.com/nba/?key=APIKEY&num=10 public static final String HOST="http://api.tianapi.com/nba/";

//接口:http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage
public static final String BASE_URL= "http://result.eolinker.com/";
public static final String TOKEN= "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";
}

public interface ServiceAPI {
@GET(API.HOST)
// Call<NewsBean> getNews(@Query("key")String n,@Query("num") int i);
public Flowable<NewsBean> getNews(@Query("key")String n,@Query("num") int i);

// @GET("{token}")
// public Flowable<ShopResponse<HomeData>> homepage(@Path("token") String token, @Query("uri") String uri);
}

对Retrofit的封装:

public class RetrofitHelper {
private static OkHttpClient client;
private static ServiceAPI serviceAPI;

static {
getClient();
}
public static OkHttpClient getClient(){
if(client==null){
synchronized (OkHttpClient.class){
if(client==null){
client=new OkHttpClient();
}
}
}
return client;
}

public static ServiceAPI getServiceAPI(){
if(serviceAPI==null){
synchronized (ServiceAPI.class){
if(serviceAPI==null){
serviceAPI=onCreate(ServiceAPI.class,API.HOST);
}
}
}
return serviceAPI;
}

public static <T> T onCreate(Class<T> tclass, String url){

Retrofit build = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();

return build.create(tclass);
}
}

封装Bean类省略

MVP

Model层:

public interface CGSB <T>{
void chengGong(T t);
void shiBai(Call<T> call);
}

public interface NewsModelJK {
void getNews(String url, int i, CGSB<NewsBean> cgsb);
}
public class NewsModel implements NewsModelJK {

public void getNews(String url, int i, final CGSB<NewsBean> cgsb){

Flowable<NewsBean> obserable = RetrofitHelper.getServiceAPI().getNews(url, i);//被观察者

obserable.subscribeOn(Schedulers.io())//被观察者       Scheduler (调度器)

.observeOn(AndroidSchedulers.mainThread())       //观察者 切换到主线程
.subscribe(new Consumer<NewsBean>() {
@Override
public void accept(NewsBean newsBean) throws Exception {
//调用成功的方法
cgsb.chengGong(newsBean);
}
});

}
}


P层:
 public interface INews {
void showBean(NewsBean newsBean);
}

public class NewsPersenter {

private final NewsModel newsModel;
private INews iNews;
public NewsPersenter(INews iNews) {
newsModel = new NewsModel();
this.iNews=iNews;
}
public  void getNews(final String n, int i){
newsModel.getNews(n, i, new CGSB<NewsBean>() {
@Override
public void chengGong(NewsBean newsBean) {
iNews.showBean(newsBean);
}

@Override
public void shiBai(Call<NewsBean> call) {

}
});
}
}

public class MainActivity extends AppCompatActivity implements INews {

private XRecyclerView mXrlv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
NewsPersenter newsPersenter = new NewsPersenter(this);
newsPersenter
61f7
.getNews("71e58b5b2f930eaf1f937407acde08fe", 10);
/**
* 沉浸式
*/
initState();

}

@Override
public void showBean(NewsBean newsBean) {
//     Log.i("Tag", newsBean.getMsg());
List<NewsBean.NewslistBean> newslist = newsBean.getNewslist();
mXrlv.setLayoutManager(new LinearLayoutManager(this));
MyAdapter myAdapter = new MyAdapter(newslist, this);
mXrlv.setAdapter(myAdapter);

}

private void initView() {
mXrlv = (XRecyclerView) findViewById(R.id.xrlv);

}
/**
* 沉浸式状态栏
*/
private void initState() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: