Rxjavaとretorfitの混合使用
27605 ワード
1.依存のインポート
3.レイアウトファイル
activity_main中
item_ホームの中
beanクラス
3 MyApplication継承Applicationの作成
HomeAdapter
5 mainactivityで使用
7.Apiクラスの作成
ApiServiceインタフェース、
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:recyclerview-v7:26.0.0-alpha1'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.facebook.fresco:animated-gif:0.12.0'
2、
<uses-permission android:name="android.permission.INTERNET">uses-permission>
3.レイアウトファイル
activity_main中
<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" />
item_ホームの中
<TextView
android:id="@+id/id_num"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="1" />
<com.facebook.drawee.view.SimpleDraweeView
android:layout_width="200dp"
android:layout_height="200dp"
android:id="@+id/main_simple_drawee_view"
fresco:placeholderImage="@mipmap/ic_launcher"/>
beanクラス
public class Suppercalss {
/**
* code : 200
* msg : success
* newslist : [{"ctime":"2017-10-26 07:53","title":" ? : ","description":" ","picUrl":"","url":"http://news.sohu.com/20171026/n519914029.shtml"},{"ctime":"2017-10-14 08:40","title":" 460 ","description":" ","picUrl":"","url":"http://news.sohu.com/20171014/n517767283.shtml"},{"ctime":"2017-10-03 20:41","title":" | 10 ,70 , !","description":" ","picUrl":"http://photocdn.sohu.com/20171003/Img515929518_ss.jpeg","url":"http://news.sohu.com/20171003/n515929517.shtml"},{"ctime":"2017-09-30 13:28","title":"\u201c \u201d : ","description":" ","picUrl":"http://photocdn.sohu.com/20170930/Img515443705_ss.jpeg","url":"http://news.sohu.com/20170930/n515443704.shtml"},{"ctime":"2017-09-30 08:54","title":" 220 3 ","description":" ","picUrl":"","url":"http://news.sohu.com/20170930/n515392928.shtml"},{"ctime":"2017-09-12 07:45","title":"80 \u201c \u201d","description":" ","picUrl":"http://photocdn.sohu.com/20170911/Img510908418_ss.jpeg","url":"http://news.sohu.com/20170911/n510908417.shtml"},{"ctime":"2017-09-04 06:40","title":"【 】 : \u201c \u201d11 ","description":" ","picUrl":"http://photocdn.sohu.com/20170903/Img509482875_ss.jpeg","url":"http://news.sohu.com/20170903/n509482874.shtml"},{"ctime":"2017-08-09 00:31","title":" : ","description":" ","picUrl":"http://photocdn.sohu.com/20170809/Img505992955_ss.jpeg","url":"http://news.sohu.com/20170809/n505992954.shtml"},{"ctime":"2017-06-07 10:12","title":" ! \u201c \u201d","description":" ","picUrl":"","url":"http://news.sohu.com/20170607/n495984947.shtml"},{"ctime":"2017-06-06 06:19","title":" | WWDC 2017 ","description":" VR","picUrl":"http://img4.cache.netease.com/photo/0009/2017-06-06/s_CM7TROL26PGI0009.jpg","url":"http://tech.163.com/special/S1496632396292/"}]
*/
private int code;
private String msg;
private List 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 getNewslist() {
return newslist;
}
public void setNewslist(List 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;
}
}
}
3 MyApplication継承Applicationの作成
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
4アダプタの作成HomeAdapter
public class HomeAdapter extends RecyclerView.Adapter {
Context context;
List list;
public HomeAdapter(MainActivity context, List list) {
this.list = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder 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(RecyclerView.ViewHolder holder, int position) {
MyViewHolder myViewHolder=(MyViewHolder) holder;
myViewHolder.tv.setText(list.get(position).getTitle());
Uri uri = Uri.parse(list.get(position).getPicUrl());
myViewHolder.sdv.setImageURI(uri);
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv;
SimpleDraweeView sdv;
// SimpleDraweeView sdv;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
sdv = view.findViewById(R.id.main_simple_drawee_view);
}
}
}
5 mainactivityで使用
public class MainActivity extends AppCompatActivity {
// TextView tv;
private RecyclerView mRecyclerView;
private List newslist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// tv = (TextView) findViewById(R.id.tv);
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
// mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
// getNoParams();
getEr();
}
public void getNoParams() {
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_PATH).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
//
//http://service.meiyinkeqiu.com/service/ads/cptj
ApiService apiService = retrofit.create(ApiService.class);
// Observable
Observable observable = apiService.getNoParams();
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onCompleted() {
Toast.makeText(MainActivity.this,"onCompleted",Toast.LENGTH_LONG);
Log.d("main", "onCompleted: ");
}
@Override
public void onError(Throwable e) {
Toast.makeText(MainActivity.this,"onCompleted",Toast.LENGTH_LONG);
Log.d("main", "onError: ");
}
@Override
public void onNext(News news) {
List ads = news.getAds();
for (int i=0;i// tv.setText(ads.get(i).getGonggaoren());
}
}
});
}
public void getEr(){
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.GUO_NEI).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
ApiService service = retrofit.create(ApiService.class);
Observable er = service.getEr();
er.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Suppercalss suppercalss) {
newslist = suppercalss.getNewslist();
// for (int i = 0; i< newslist.size(); i++){
// tv.setText(newslist.get(i).getTitle());
// }
HomeAdapter homeAdapter = new HomeAdapter(MainActivity.this, newslist);
mRecyclerView.setAdapter(homeAdapter);
}
});
}
}
7.Apiクラスの作成
public class Api {
public static final String BASE_PATH="http://service.meiyinkeqiu.com";
public static final String GUO_NEI="http://api.tianapi.com";
}
8.作成ApiServiceインタフェース、
public interface ApiService {
@GET("/service/ads/cptj")
Observable getNoParams();
@GET("/social/?key=ac87b4a4e634eb4a4e96fd371490a667&num=10")
Observable getEr();
}