第一步导入依赖包
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>