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