Retrofit2总结一

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;
        }
    }
}


两种实现方式这样就写完了!经测试,没有问题,数据可以正常显示!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值