2016年的最后一篇博客--超超

话说今天元旦假期,有女盆友的都去约了,有球友的也去约了,我么,我还小,我不约。。
既然不约,那就撸一发。。
刚好下礼拜开始,苦逼日子就来了唉。。公司项目重构。。。。。。。。
对自己来说这样是个成长的机会,因为又可以用很多新的东西。技术也可以更新迭代了。。。

需求:
网络请求要添加headers,用自定义的证书https的URL网络请求。
其实很早开始接触rx retrofit 了,一直都没机会用,这次就来个封装吧。。

要不先来个图???
这里写图片描述

这里写图片描述

这里写图片描述

好了,老套路,边开玩笑边开始。

既然要养花儿,先得有个花盆吧。不能就放在地板上养吧,那样是粗人干的事,不是我这个北方的汉子干的事儿。。既然要有花盆,那就得先依赖喽。。

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.google.code.gson:gson:2.8.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'

好了,准备好你的嘴,开始square的全家桶了。。哈哈,然而好难吃。
OK,依赖好了以后,花盆买来了以后,该对花盆配置一下,也就是收拾一下。好歹拾掇的好好滴,看起来也舒坦么。
养花的话,不同的花儿需要不同的土壤,有的不要土壤,只要水,所以呢,先来个小房间来放这些花儿需要的不同的额水和不同的土壤。代码里来个APIService接口,这就是咱的小房子。

import java.util.Map;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;

/**
 * Created by scc on 2016/12/31.
 */
public interface APIService {

    @FormUrlEncoded
    @POST("你的地址,我的我删除了!")
    Observable<Scc> getDatas(@FieldMap Map<String,String> map);


    @GET("你的地址,我的我删除了!")
    Observable<String> getListDatas(@Query("name") String name);

    @GET("你的地址,我的我删除了!")
    Observable<String> getListDatas(@QueryMap Map<String,String> ma);
}

上面的这些呢,都是retrofit中的一些请求方法和参数,关于这些呢,网上一大堆一大堆,自己去看就好了。这些就相当于咱们养花儿的不同的水和土壤。

下面呢,咱来配置一下花盆吧,收拾的好看一点,有助于泡妹子哈,我是不是想多了,唉。。不提这事儿了,内牛满面。。配置吧。

import com.scc.jibuqi.util.HttpParams;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Created by scc on 2016/12/31.
 */
public class RetrofitManager {
    private Retrofit retrofit;
    private APIService service;
    private static RetrofitManager r;
    private OkHttpClient client;
    //私有化构造方法

    private RetrofitManager() {
        retrofit = new Retrofit.Builder()
                .baseUrl("你的baseURL,我的我删除了!!")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .client(getOk())
                .build();
        service = retrofit.create(APIService.class);
    }


    public void getData(Subscriber<Scc> subscriber) {
        Observable<Scc> observable = service.getDatas(HttpParams.getParams());
        observable.subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);
    }

    public static RetrofitManager getInstance() {
        synchronized (RetrofitManager.class) {
            if (r == null) {
                return r = new RetrofitManager();
            } else {
                return r;
            }
        }
    }

    private OkHttpClient getOk() {

        X509TrustManager xtm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                X509Certificate[] x509Certificates = new X509Certificate[0];
                return x509Certificates;
            }
        };

        SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("SSL");

            sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };

        if (client == null) {
            client = new OkHttpClient.Builder()
//                    .addInterceptor(new Interceptor() {
//                        @Override
//                        public Response intercept(Chain chain) throws IOException {
//                            Request re = chain.request().newBuilder()
//                                    .addHeader("apikey", "4a79a19701e4a722dfd91c6766dc4045")
//                                    .build();
//                            return chain.proceed(re);
//                        }
//                    })
                    .addInterceptor(new LogInterceptor())
                    .sslSocketFactory(sslContext.getSocketFactory())
                    .hostnameVerifier(DO_NOT_VERIFY)
                    .build();
            return client;
        } else {
            return client;
        }
    }
}

在RetrofitManager的构造方法中,初始化retrofit和APIService。细心的您会发现初始化Okhttp的时候里面有个getOK啥玩意儿啊,这个方法是OK的初始化。
在getOK方法中,设置信任所有的https的网络请求。注释掉的那段代码是添加headers的请求头参数。

好了,这些初始化的工作做好了以后,花盆OK了。接下里该往里面种花儿了,春天播下种子,夏天它发芽,秋天它落叶,冬天它。。死啦。。没关系,来年再种。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import rx.Subscriber;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "scc";
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.tv);

        RetrofitManager.getInstance().getData(new Subscriber<Scc>() {
            @Override
            public void onCompleted() {
                Log.i(TAG, "onCompleted: 结束");
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG, "onError: "+e.toString());
            }

            @Override
            public void onNext(Scc s) {
               if (s.getCode()==0){
                   textView.setText(s.getRes().getBanner_list().size()+"");
               }
            }
        });

    }
}

接下来在你的Activity中调用就好了。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值