Retrofit 网络请求框架

1.首先我一开始使用的是Okhttp,后来要更新框架,我做了比较,决定还是用Retrofit。

   Okhttp:适用那种大数据网络请求

   Retrofit:频繁操作的网络请求

   所以我们的请求大多都不是很大的,我就决定用Retrofit,再说Retrofit是在Okhttp进行一步封装,怎么样也应该比Okhttp好很多的,还有就是Retrofit和RxJava可以很好结合,所以就用Retrofit。


2.https://github.com/square/retrofit 这个是retrofit的最新地址,最后一个是json

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.google.code.gson:gson:2.8.2'

3.请求参数

public interface ApiService {

@FormUrlEncoded
@POST("auth")
Call<ResponseBody> getAuth(@Field("sn")String sn, @Field("secret")String secret);
}


4.请求网络

private void getAuth(){
    //网络请求地址
    String baseUrl = "http://api.***.com:8080/analyzer/";
    //网络请求参数
    String sn = "11111111111";
    String secret = "00000000000000000000000000000000000000";
    //请求拦截,意思是你每次都会有相同的头,这个地方写上就不用每次都写了
    Interceptor headerInterceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();
            Request request = original.newBuilder()
                    .header("Client-Type", "analyzer")
                    .method(original.method(), original.body())
                    .build();
            return chain.proceed(request);
        }
    };
    //因为是Okhttp封装的 ,所以还是使用了Okhttp ,好处是项目里面Okhttp大数据请求,Retrofit频繁交互
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(headerInterceptor)
            .build();
    //配置Retrofit,添加地址,并加上Okhttp
    Retrofit retrofitClient = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build();
    //这里是把请求参数加上来
    ApiService apiService = retrofitClient.create(ApiService.class);
    //请求参数的一个方法,你还可以继续加;
    Call<ResponseBody> call = apiService.getAuth(sn, secret);
    call.enqueue(new Callback<ResponseBody>() {
       @Override
        public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
          if (response.isSuccessful()) {
            try {
                String jsonObjectString = new String(response.body().bytes());
                JSONObject jsonObject = new JSONObject(jsonObjectString);
                infoText.setText(jsonObject.getString("token"));
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
          }else{
            infoText.setText("Unexpected code " + response);
          }
       }

       @Override
       public void onFailure(Call<ResponseBody> call, Throwable t) {
        infoText.setText(t.getLocalizedMessage());
      }
     });
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值