RxJava+Retrofit+Recyclerview的实现

第一步导入依赖包

compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    compile 'com.android.support:mediarouter-v7:25.0.0'
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:recyclerview-v7:25.0.0'
    compile files('libs/universal-image-loader-1.9.3.jar')
    //静态图片
    compile 'com.facebook.fresco:fresco:0.12.0'
    // 支持 GIF 动图,需要添加
    compile 'com.facebook.fresco:animated-gif:0.12.0'

第二,加权限,加网络权限即可

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Api

package api;
public class Api {
    public static  final  String BASE_PATH ="https://api.tianapi.com/wxnew/";
    public static  final  String BASE_NEW="http://api.tianapi.com/social/";
    public static  final  String BASE_HOME="http://api.expoon.com/AppNews/getNewsList/";
}

ApiServices (拼接,inter包中)

package inter;

import bean.Home;
import bean.Homes;
import bean.New;
import retrofit2.http.GET;
import rx.Observable;

/**
 * Created by chentong on 2017/11/3.
 */

public interface ApiServices {
    @GET("?key=8d6e3228d25298f13af4fc40ce6c9679&num=20&page=")
    Observable<Home> getHome();
    @GET("?key=71e58b5b2f930eaf1f937407acde08fe&num=20")
    Observable<New> getNew();
    @GET("type/1/p/1")
    Observable<Homes> getHomes();
}

New (bean包中)

package bean;

import java.util.List;

/**
 * Created by chentong on 2017/11/3.
 */

public class New {
    private int code;
    private String msg;
    private List<NewslistBean> newslist;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {
        /**
         * ctime : 2017-10-26 07:53
         * title : 如何看待历史剧? 媒体:把握好不虚与不拘
         * description : 搜狐社会
         * picUrl :
         * url : http://news.sohu.com/20171026/n519914029.shtml
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}

MyApp


import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by chentong on 2017/11/3.
 */

public class MyApp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

MainActivity 中

public class MainActivity extends AppCompatActivity {
    private RecyclerView re;
    private List<Home.NewslistBean> data;
    private List<New.NewslistBean> mdata;
    private List<Homes.DataBean> bean;
    //private HomeAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        re= (RecyclerView) findViewById(R.id.id_recyclerview);

    //gethome();
        getuser();
       // gethomes();
    }
     private void getuser()
    {
        //创建Retrofit
        Retrofit retrofit=new Retrofit.Builder().baseUrl(Api.BASE_NEW).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
        //通过动态代理得到网络接口对象
        ApiServices apiService = retrofit.create(ApiServices.class);
        Observable<New> news= apiService.getNew();
        news.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<New>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(New aNew) {
                            mdata=aNew.getNewslist();
                       /* mAdapter = new HomeAdapter();
                        re.setAdapter(mAdapter);*/
                        Adpater adpater = new Adpater(MainActivity.this,aNew.getNewslist());
                        re.setAdapter(adpater);
                        re.setLayoutManager(new LinearLayoutManager(MainActivity.this));//list
                    }
                });
    }
}

Adpater

package adpater;

import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bwie.retrofit.MainActivity;
import com.bwie.retrofit.R;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import bean.Homes;
import bean.New;

/**
 * Created by chentong on 2017/11/3.
 */

public class Adpater extends RecyclerView.Adapter<Adpater.MyViewHolder>{
    Context context;
   List<New.NewslistBean> mdata;
    public Adpater(Context context, List<New.NewslistBean> mdata) {
        this.context = context;
        this.mdata = mdata;
    }
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    context).inflate(R.layout.item_home, parent,
                    false));
            return holder;
        }
        public void onBindViewHolder(final MyViewHolder holder, final int position)
        {
            //  holder.tv.setText(data.get(position).getTitle());
            holder.tv.setText(mdata.get(position).getCtime());
          /*  ImageLoader imageLoader=ImageLoader.getInstance();
            imageLoader.getInstance().displayImage(data.get(position).getPicUrl(),holder.imageView);*/

//得到图片的url
            Uri uri= Uri.parse(mdata.get(position).getPicUrl());
            holder.draweeView.setImageURI(uri);//设置给Fresco
        }
        @Override
        public int getItemCount()
        {
            return mdata.size();
        }


    class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView tv;
        public SimpleDraweeView draweeView;
        public MyViewHolder(View view)
        {
            super(view);
                tv = (TextView) view.findViewById(R.id.home_text);
            draweeView=(SimpleDraweeView) view.findViewById(R.id.my_image_view);

        }
    }
}

activity_main中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.bwie.retrofit.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/id_recyclerview"
        android:divider="#ffff0000"
        android:dividerHeight="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

item_home中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/img"
        android:layout_margin="5dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        fresco:actualImageScaleType="focusCrop"
        fresco:placeholderImage="@mipmap/ic_launcher"
        fresco:placeholderImageScaleType="focusCrop"
        fresco:progressBarImage="@mipmap/ic_launcher"
        fresco:progressBarImageScaleType="focusCrop"
        fresco:progressBarAutoRotateInterval="5000"
        fresco:failureImage="@mipmap/ic_launcher"
        fresco:failureImageScaleType="focusCrop"
        fresco:retryImage="@mipmap/ic_launcher"
        fresco:retryImageScaleType="focusCrop"
        fresco:fadeDuration="5000"
        fresco:backgroundImage="@android:color/holo_orange_light"
        fresco:roundAsCircle="true"
        fresco:roundedCornerRadius="30dp"
        fresco:roundTopLeft="true"
        fresco:roundTopRight="true"
        fresco:roundBottomLeft="true"
        fresco:roundBottomRight="true"
        fresco:roundingBorderWidth="5dp"
        fresco:roundingBorderColor="#008dd7"
        />
    <TextView
        android:id="@+id/i_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值