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