Retrofit2总结一
来源:互联网 发布:展板设计制作软件 编辑:程序博客网 时间:2024/05/21 08:55
Retrofit2总结一:
利用Retrofit2进行安卓中的各种网络处理,包含get、post、上传、下载等等一系列的处理。会结合Rxjava一起使用,本次总结只是最常用的get请求。结合一个小例子来实现。
依赖很重要:
第一个是retrofit+gson 下面3个全部是Rxjava的依赖
compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'io.reactivex:rxjava:1.1.9' compile 'io.reactivex:rxandroid:1.2.1' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
然后是布局,也很简答:
上面两个listViw 分别展示的是只使用retrofit 和 retrofit+rxjava 两种处理后的结果
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zgcw.wangqiang.retrofitdemo.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <LinearLayout android:gravity="center_vertical" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:background="@null" android:visibility="gone" android:layout_gravity="center" android:id="@+id/button_refresh" android:text="网络异常,暂无数据,点击刷新" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/progressBar" android:visibility="gone" android:layout_gravity="center_horizontal"/> </LinearLayout></LinearLayout>
数据是聚合api的免费接口:"http://v.juhe.cn/toutiao/index?type=top&key=6d130e4d5c6616611808542db929db1c"
先写实体类:
package com.zgcw.wangqiang.retrofitdemo;import java.util.List;/** * Created by wangqiang on 16/8/15. */public class News { private String reason; private ResultBean result; private int error_code; public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public ResultBean getResult() { return result; } public void setResult(ResultBean result) { this.result = result; } public int getError_code() { return error_code; } public void setError_code(int error_code) { this.error_code = error_code; } public static class ResultBean { private String stat; private List<DataBean> data; public String getStat() { return stat; } public void setStat(String stat) { this.stat = stat; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private String title; private String date; private String author_name; private String thumbnail_pic_s; private String thumbnail_pic_s02; private String thumbnail_pic_s03; private String url; private String uniquekey; private String type; private String realtype; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getAuthor_name() { return author_name; } public void setAuthor_name(String author_name) { this.author_name = author_name; } public String getThumbnail_pic_s() { return thumbnail_pic_s; } public void setThumbnail_pic_s(String thumbnail_pic_s) { this.thumbnail_pic_s = thumbnail_pic_s; } public String getThumbnail_pic_s02() { return thumbnail_pic_s02; } public void setThumbnail_pic_s02(String thumbnail_pic_s02) { this.thumbnail_pic_s02 = thumbnail_pic_s02; } public String getThumbnail_pic_s03() { return thumbnail_pic_s03; } public void setThumbnail_pic_s03(String thumbnail_pic_s03) { this.thumbnail_pic_s03 = thumbnail_pic_s03; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUniquekey() { return uniquekey; } public void setUniquekey(String uniquekey) { this.uniquekey = uniquekey; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getRealtype() { return realtype; } public void setRealtype(String realtype) { this.realtype = realtype; } } }}然后定义接口,如果你知道retrofit的话 ,这些步骤你应该都知道
package com.zgcw.wangqiang.retrofitdemo;import retrofit2.Call;import retrofit2.http.GET;import retrofit2.http.Query;import rx.Observable;/** * Created by wangqiang on 16/8/15. */public interface Service { @GET("toutiao/index") Call<News> getInfo(@Query("type") String type, @Query("key") String key); @GET("toutiao/index") Observable<News> getData(@Query("type") String type, @Query("key") String key);}
接下来是主Activity
package com.zgcw.wangqiang.retrofitdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextView mTextView, mTextView2; private Button mButton; private static final String TAG = "MainActivity"; private static final String ENDPOINT = "http://v.juhe.cn/"; private Retrofit retrofit = null; private Call<News> serviceInfo; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initView() { mTextView = (TextView) findViewById(R.id.textView); mTextView2 = (TextView) findViewById(R.id.textView2); mButton = (Button) findViewById(R.id.button_refresh); mButton.setOnClickListener(this); mProgressBar = (ProgressBar) findViewById(R.id.progressBar); } private void initData() { retrofit = new Retrofit.Builder() .baseUrl(ENDPOINT) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); Service service = retrofit.create(Service.class); //retrofit2实现方式 serviceInfo = service.getInfo("top", "6d130e4d5c6616611808542db929db1c"); serviceInfo.enqueue(new Callback<News>() { @Override public void onResponse(Call<News> call, Response<News> response) { if (response.isSuccessful() && response.body() != null) { mProgressBar.setVisibility(View.GONE); mButton.setVisibility(View.GONE); News.ResultBean.DataBean dataBean = response.body().getResult().getData().get(0); mTextView.setText(dataBean.getTitle()); } } @Override public void onFailure(Call<News> call, Throwable t) { t.printStackTrace(); mButton.setVisibility(View.VISIBLE); } }); //retrofit2+RxJava实现方式 service.getData("top", "6d130e4d5c6616611808542db929db1c") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<News>() { @Override public void onCompleted() { mProgressBar.setVisibility(View.GONE); } @Override public void onError(Throwable e) { Log.i(TAG, e.getMessage()); mButton.setVisibility(View.VISIBLE); } @Override public void onNext(News news) { mProgressBar.setVisibility(View.VISIBLE); mButton.setVisibility(View.GONE); News.ResultBean.DataBean dataBean1 = news.getResult().getData().get(0); mTextView2.setText(dataBean1.getAuthor_name()); } }); } @Override protected void onStop() { super.onStop(); serviceInfo.cancel(); } //点击刷新,加载数据 @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_refresh: new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(3000); initData(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); break; } }}
两种实现方式这样就写完了!经测试,没有问题,数据可以正常显示!
0 0
- Retrofit2总结一
- Retrofit2.1用法(一)
- Retrofit2使用手册-基础一
- Retrofit2 完全解析(一)
- retrofit2上传文件总结
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- Retrofit2使用总结
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- Retrofit2 简明教程(一)
- Retrofit2 学习笔记(一)
- Retrofit2 简明教程(一)
- Retrofit2源码解析(一)
- Retrofit2源码解析(一)
- android retrofit2 文件上传(一)
- retrofit2、RxJava简单使用总结
- App系列------如何把asset目录下文件copy到机台中
- LeetCode | Regular Expression Matching
- php mysqli的使用方法
- iOS流布局UICollectionView系列二——UICollectionView的代理方法
- qt 多线程用法
- Retrofit2总结一
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- caffe代码阅读:SyncedMemory和Blob
- Eclipse 重复/撤销框架---转载自(IBM 田晨的文档)
- 伪类 :after和:before介绍
- sublime text实现函数跳转(window环境)
- 约瑟夫环的问题---最后剩下哪一个
- linux硬链接与软链接
- CAS和vector clock笔记