首先导入依赖:
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.nostra13.universalimageloader:universal-image-loader:1.9.5'
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 'com.android.support:appcompat-v7:23.4.0'
compile 'com.facebook.fresco:fresco:0.11.0'
主Main
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
private HomeAdapter mAdapter;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
getUrljson1();
}
private void getUrljson1(){
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.Urljson1).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
ApiService apiService = retrofit.create(ApiService.class);
Observable<Users> muser = apiService.getUser();
muser.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Users>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Users users) {
mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
mRecyclerView.setAdapter(mAdapter = new HomeAdapter(users.getNewslist(),MainActivity.this));
}
});
};
}
Api类
public class Api {
public static final String Urljson1 = "https://api.tianapi.com/wxnew/";
// public static final String Urljson2="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10";
// public static final String Urljson3="http://www.yulin520.com/a2a/impressApi/news/mergeList?sign=C7548DE604BCB8A17592EFB9006F9265&pageSize=10&gender=2&ts=1871746850&page=1";
}
ApiService 类
import retrofit2.http.GET;
import rx.Observable;
/**
* Created by wangjiao on 2017/11/3.
*/
public interface ApiService {
@GET("?key=8d6e3228d25298f13af4fc40ce6c9679&num=20&page=")
Observable<Users> getUser();
}
HomeAdapter 适配器
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.TextView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.List;
/**
* Created by wangjiao on 2017/11/3.
*/
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{
List<Users.NewslistBean> userses;
Context context;
public HomeAdapter(List<Users.NewslistBean> userses, Context context) {
this.userses = userses;
this.context = context;
}
SimpleDraweeView image;
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_home, parent, false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
holder.tv.setText(userses.get(position).getTitle());
Uri uri = Uri.parse(userses.get(position).getPicUrl());
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
image.setController(controller);
}
@Override
public int getItemCount()
{
return userses.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.text);
image = (SimpleDraweeView) view.findViewById(R.id.image);
}
}
}
MyApp类
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2017/9/8 12:33
*/
public class MyApp extends Application {
public static MyApp mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
ImageLoaderConfiguration aDefault = ImageLoaderConfiguration.createDefault(getApplicationContext());
ImageLoader.getInstance().init(aDefault);
//必须初始化Fresco,不然加载不出来图片
Fresco.initialize(this);
}
public static MyApp getInstance() {
return mInstance;
}
}
封装User类
import java.util.List;
/**
* Created by wangjiao on 2017/11/3.
*/
public class Users {
/**
* code : 200
* msg : success
* newslist : [{"ctime":"2017-11-03","title":"长沙3名市管干部受到党纪重处分","description":"红网","picUrl":"https://t1.qpic.cn/mblogpic/48da2c609d0a7f9d083e/2000","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706512&signature=Te*2gO2rGnYcmIDbSqr3PEmTOvtepT3IDW6HMlkuRmTulEwyaSil9G-1CNWlu2fu8HVpkb5NAhHUgiYujzEzowfSLLHSVnAZ97zau5MaFHA="},{"ctime":"2017-11-03","title":"九旬老人突然走失,附近新村居民一起帮家属寻找!你见过他么?","description":"社会传真","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-28950100.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706512&signature=zJekcz1RjF6mOhoCfKHnYXaBdPUjgTQoQRyLXCsD8zDxGfP09iql*7ce2*8tohODUdZFXoOXGCAA5n3AoFdFGzbWrlJKU4NlL7oFshssl2k="},{"ctime":"2017-11-03","title":"【行摄金秋】时光荏苒你最美好,一同走进临安指南村,探访华东最美古村落,赏醉美五彩秋景(11月11日)","description":"余姚新闻网","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57192418.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706511&signature=FWiU9-FL1CSsACLfxR0AqxPotSv-YQDguAI*e8sXMUFqxe778DiRIpqx5nZc2BEKs839ifICzXKBanlGV2XGrdVmC1Gn3rm60Btm3YRE*gY="},{"ctime":"2017-11-03","title":"快看!省属事业单位招聘职位表出炉 在苏岗位有哪些?","description":"社会传真","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-28950100.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706511&signature=upIvz1GERXXUSRjx9x7N8yBRzRfGUO5Q3vlT*MiZID9MnXDKlo1c5YkXsze20xlCKFWBs*WFWP54JvC2tOUzlc5FeYI70nIcAMZcWvdTBV0="},{"ctime":"2017-11-03","title":"直降7℃+7级大风,明后两天冷空气又要来巢湖搞事情!冷到你想哭\u2026","description":"巢湖发布","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57192651.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706511&signature=qx2JHW7bGLljb*wUyo6JeW-zoEa*LR9HT8b4csB3vjYVuEHdq5cGMWkc5yWcE5XUHoj41eEpYsSIN2P*0TKBkPZ9xGapf2Md819ESEbMyz8="},{"ctime":"2017-11-03","title":"汉族语言特点","description":"大雅古琴网","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-33867854.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703241&signature=Odk06F8xCCb61fgU6kg97K714fLfPkNxIxOng-i12EftI7m08Oghodex6fBUTPg0m*yO6jk4PdX-xmVHBtsxOWppKTnonsvtt1CxjHIBqJM="},{"ctime":"2017-11-03","title":"江云祥新作:问君何能尔,心远地自偏","description":"青藤艺术","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57107113.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703240&signature=pBkTxif8j0Bd8wmc9UI99QN7gHv7K4l3HRzGu6vqMaQBRafN1zbcIiqLjY58SHkgBRo9FmI7yh1DQ1sD4bK5HmhicHpYMU8Rax2M9og2pPo="},{"ctime":"2017-11-03","title":"恽寿平:绘画的最高境界在于传神","description":"青藤艺术","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57107118.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703240&signature=qKsqZVxzt1wRNwJ1VW68nQ*JUrWnvsxQkYNH0aO-NcnyXJiYc2W1noYc75xgKaYi5zkSSbSFIJeVelIQxBTfjh2faIGM5PIxvKmUBjzdfwY="},{"ctime":"2017-11-03","title":"老北京话\u201c猫儿腻\u201d和猫有关吗?","description":"皇城根儿胡同串子","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57098183.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703240&signature=ARKNC7eteib70HYKeQsL2dHnHg7P9IAgm0RwAi0i9Q*lPN8ruQlvSMrr9Fe6OewbNpAwK7h0cWr*rtSX3COklRP-4quK0N3bLsfUuP7f8QA="},{"ctime":"2017-11-03","title":"市场:四轮生肖邮品目前市场价格","description":"集邮杂志","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-37619088.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703239&signature=1vntbXeWNaeRPxzOSjCeuNYKCZA9aE2bD9WtGxoDqM8N*OaxuhNQBte7aVmrkarEapEhi8Vi8GHR9*hobnZSCsQEDO7aSwvXE1WOKF2Ch5s="},{"ctime":"2017-11-03","title":"明年不是二胎了","description":"集邮杂志","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-37619088.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703239&signature=KVYbYj4oNUKtYIgvp54xC2hQ82PfKCLi3AH*Y1aJnO2K3m2sysg9CzPxkmazlJ8cV8bbBND32ykUdsQAneQL7dMVYyyLEJnFO*lntbSyB-E="},{"ctime":"2017-11-03","title":"名著也可以如此有趣?四大名著中的歇后语汇总!","description":"湖南考试招生","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-37622005.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703239&signature=dOxOP82Uk5h39lVgBUMPVES0hce2z7MSQlq1X2hI*z2Vo572M9XavK-ZerBaiyZDZxNfLrUvQFq*OJzQ0VFLK6k7uNiY4Nn2W0g3f4mc-Qg="},{"ctime":"2017-11-03","title":"我们仨的读书会","description":"新东方","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57090684.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703238&signature=TJrptke1WIEWtWjlaIe5dkLajvlJxxoyP3yQ5syUzoXe0wHI9u3cTMQvKQqwSxE1hBQ3mA*JwGSnZA5D8YEjqrfZcD8WwD*o4pf2ikZFizI="},{"ctime":"2017-11-03","title":"诺奖得主石黑一雄:真诚,是通往人心的最好途径","description":"新东方","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57090644.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703238&signature=5MjlmhDN7XtAHm9*v5mJf90BGvoWpxSZTTL9cM0*ndfwRwHLZIm1UT6EFv5Xb*lxbTwAnQ*OBCYHyTrLC9lvUSwzewwZj-oRaSt7HeUkPvI="},{"ctime":"2017-11-03","title":"禅意竹雕,换个方式惊世骇俗!","description":"植物网","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-56636068.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703238&signature=DCh0rnBdLB09YzVoSRoKTBp64FJ49R2laUJSquWmennH4DSnKkr-3i4pfpS*rtAAHoDwXIeVlCCrnsN25GRup5QCfPdAcAOZWidhgSxkFTY="},{"ctime":"2017-11-03","title":"广购跨省开分店,书店转型升级还能这么玩?","description":"出版商务周报","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-29259560.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703237&signature=n0RNWL5Nmtl3K5Yl9Sk-iDDBE47j-piNc9mZkKoZ6licvHa5mUP-pbRxsyMpTELrh*X6ATHgtAI1YXkxAlnt*gUSu23OJDzmhTusyBkAwXQ="},{"ctime":"2017-11-03","title":"荐馆 | 有的地方暖心,这个博物馆暖\u2026\u2026脚","description":"蝌蚪五线谱","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-30961035.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703237&signature=Qc*06*bx6ZdCbJY8JVnu-JKQFaigqaYddi4shuCG30W29aOXkzu7rjZ2ecolQwAAjaKM01d4wZiMXeZXc7chg-N3XVJSfzJ7St-2dkYRmkw="},{"ctime":"2017-11-03","title":"崖柏火了,老外们都不淡定了!!!","description":"崖柏","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-57086563.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703237&signature=NOwGF4TQNzSim*YZ9BdiwM7lEJGvlen0jNda63w5G8rE3jEnkvPoCD8lIpk*fBVPwyL-QtOQcEbDuJ9wjt-LHHYyss--B8VRv3DsnS-fRbw="},{"ctime":"2017-11-03","title":"【热门报价】11月3日中国集币在线钱币报价","description":"集币在线","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-37625028.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703236&signature=uGBF2dWkxriTOnzV19lPggtr47*A6JLgIPiOy00JCSFOWKbjU14Zj2LfHgnemRl9MR1LpPmZvfHZghwqEVMsHbQZJ8mx9*IpGDvw6nTS*Sg="},{"ctime":"2017-11-03","title":"【纸币】第二套人民币图文详解,用过的人都老了!","description":"集币在线","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-37625028.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509703236&signature=1hmsAo3dQfR96BiJRpJ3GAY2rnVc4i4XWnkYSHAB2srhA0TTtdKj68XpOvSSKwe1VsUWFopIROi0DD8rjExM6qKpoP-qfzRnn3HjTlKGfcE="}]
*/
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-11-03
* title : 长沙3名市管干部受到党纪重处分
* description : 红网
* picUrl : https://t1.qpic.cn/mblogpic/48da2c609d0a7f9d083e/2000
* url : https://mp.weixin.qq.com/s?src=16&ver=466×tamp=1509706512&signature=Te*2gO2rGnYcmIDbSqr3PEmTOvtepT3IDW6HMlkuRmTulEwyaSil9G-1CNWlu2fu8HVpkb5NAhHUgiYujzEzowfSLLHSVnAZ97zau5MaFHA=
*/
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;
}
}
}
Main.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
xmlns:fresco="http://schemas.android.com/apk/res-auto">
//这里SimpleDraweeView可以实现图片加载错误显示默认图片
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
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/text"
android:layout_width="wrap_content"
android:layout_height="100dp" />
</LinearLayout>
最后记得在AndroidManifest.xml中添加网络权限与android:name=”.MyApp”