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