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
原创粉丝点击