压缩包
MainActivity.java
一、Retrofit简介
A type-safe HTTP client for Android and Java。封装了OkHttp,也是由Square公司贡献的一个处理网络请求的开源项目。
[https://github.com/square/retrofit](https://github.com/square/retrofit)
1.依赖包:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'<br />
二、Retrofit基本使用一
服务器域名:[https://www.httpbin.org/](https://www.httpbin.org/)<br /> 接口:post<br /> 参数:username,possword<br /> 接口:get<br /> 参数:username,possword
1.根据接口创建Java接口:
三、Retrofit基本使用二
2.创建Retrofit配置,并生成接口实现类对象:
Retrofit retrofit=new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build();<br /> HttpbinService httpbinService=retrofit.create(HttpbinService.class);
3.接口实现类对象调用对应方法获得响应:
四、Retrofit实现的具体步骤:
1.创建retrofit请求的接口类
2.定义retrofit和请求的接口类
3.实现retrofit的post和callback方法
五、整体代码
1.HttpbinService接口类文件代码
package com.example.networkdemo;import okhttp3.ResponseBody;import retrofit2.Call;import retrofit2.http.Field;import retrofit2.http.FormUrlEncoded;import retrofit2.http.GET;import retrofit2.http.POST;import retrofit2.http.Query;public interface HttpbinService { // https://www.httpbin.org/post password=value @POST("post") @FormUrlEncoded Call<ResponseBody> post(@Field("username") String username,@Field("password") String pwd); @GET("get") Call<ResponseBody> get(@Query("username") String username,@Query("password") String pwd);}
2.MainActivity文件代码
package com.example.networkdemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import org.jetbrains.annotations.NotNull;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import okhttp3.ResponseBody;import retrofit2.Retrofit;public class MainActivity extends AppCompatActivity { // 请求器 private OkHttpClient okHttpClient; private static final String TAG="MainActivity"; private Retrofit retrofit; private HttpbinService httpbinService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); okHttpClient = new OkHttpClient(); retrofit = new Retrofit.Builder().baseUrl("https://www.httpbin.org/").build(); httpbinService = retrofit.create(HttpbinService.class); } public void getSync(View view) { new Thread(){ @Override public void run() { // 请求对象 Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); try { // 请求得到的响应 Response response = call.execute(); Log.i(TAG,"getSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void getASync(View view) { Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&a=2").build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); //异步请求 call.enqueue(new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { if (response.isSuccessful()){ Log.i(TAG,"getASync:"+response.body().string()); } } }); } public void postSync(View view) { new Thread(){ @Override public void run() { FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build(); Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build(); // 准备好请求的Call对象 Call call = okHttpClient.newCall(request); try { // 请求得到的响应 Response response = call.execute(); Log.i(TAG,"postSync:"+response.body().string()); } catch (IOException e) { e.printStackTrace(); } } }.start(); } public void postASync(View view) {// FormBody formBody = new FormBody.Builder().add("a", "1").add("b", "2").build();// Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();// // 准备好请求的Call对象// Call call = okHttpClient.newCall(request);// //异步请求// call.enqueue(new Callback() {// @Override// public void onFailure(@NotNull Call call, @NotNull IOException e) {//// }//// @Override// public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {// if (response.isSuccessful()) {// Log.i(TAG, "postASync:" + response.body().string());// }//// }// }); // retrofit的使用 retrofit2.Call<ResponseBody> call = httpbinService.post("lance", "123"); call.enqueue(new retrofit2.Callback<ResponseBody>() { @Override public void onResponse (retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { try { Log.i(TAG, "postASync:" + response.body().string()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) { } }); }}
3.效果图:
六、常见错误
1.retrofit运行时出现以下错误:
2.静态接口需要在Java 8 下才支持使用,所以我们要使用静态接口,就需要在app的build.gradle文件中配置声明,使用Java 8编译。所以需要加入以下代码来声明:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}
3.修改如下图所示:
