下面就为您详细讲解一下“android实现okHttp的get和post请求的简单封装与使用”的攻略。
准备工作
在进行okHttp的get和post请求的封装前,需要先在项目的 build.gradle 文件里添加 okHttp 的依赖:
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.5.0'
}
封装过程
封装Get请求
在进行Get请求的封装前,我们需要先定义一个公共的接口类:
public interface GetDataService {
@GET("api/data/{type}/{page}/{count}")
Call<ResponseBody> getData(@Path("type") String type, @Path("page") int page, @Path("count") int count);
}
这个接口类里使用了 @GET
注解来指明这是个 Get 请求,根据路径参数 type
、page
和 count
来获取指定的数据。接下来就是封装 Get 请求的代码:
public class HttpUtil {
// 封装 Get 请求
public static void sendGetRequest(String type, int page, int count, Callback callback) {
// 创建 OkHttpClient 实例
OkHttpClient client = new OkHttpClient();
// 计算请求的 Url
String url = "http://gank.io/" + "api/data/" + type + "/" + page + "/" + count;
// 创建 Request 实例
Request request = new Request.Builder().url(url).build();
// 发送异步 GET 请求
client.newCall(request).enqueue(callback);
}
}
这里我们将 Get 请求封装在了 HttpUtil
的 sendGetRequest
方法中,并使用 OkHttp 的 OkHttpClient()
方法来创建实例,计算出请求的 Url,创建 Request
实例,并使用 client.newCall(request).enqueue(callback)
异步发送 GET 请求。需要注意的是,这里我们使用了一个 Callback
类型的参数来处理异步请求的回调结果。
封装 Post 请求
封装 Post 请求的方法其实和 Get 请求并没有太大区别,同样需要先定义一个公共的接口类:
public interface PostDataService {
@FormUrlEncoded
@POST("api/post/data")
Call<ResponseBody> postData(@Field("name") String name, @Field("age") int age);
}
这个接口类里使用了 @POST
注解来指明这是个 Post 请求,并且使用 @FormUrlEncoded
和 @Field
注解来传递两个请求参数 name
和 age
。接下来就是封装 Post 请求的代码:
public class HttpUtil {
// 封装 Post 请求
public static void sendPostRequest(String name, int age, Callback callback) {
// 创建 OkHttpClient 实例
OkHttpClient client = new OkHttpClient();
// 创建 FormBody 实例
FormBody.Builder builder = new FormBody.Builder();
builder.add("name", name);
builder.add("age", String.valueOf(age));
FormBody formBody = builder.build();
// 创建 Request 实例
Request request = new Request.Builder().url("http://www.example.com/api/post/data").post(formBody).build();
// 发送异步 POST 请求
client.newCall(request).enqueue(callback);
}
}
这里我们同样将 Post 请求封装在了 HttpUtil
的 sendPostRequest
方法中,并创建一个 FormBody
实例,使用 builder.add("name", name)
和 builder.add("age", String.valueOf(age))
添加了两个请求参数,然后创建 Request
实例,并使用 client.newCall(request).enqueue(callback)
异步发送 POST 请求。
使用示例
下面是一个 Get 请求的示例,我们在 onCreate()
方法中调用 HttpUtil
类中的 sendGetRequest
方法来发送异步 Get 请求并获取数据:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HttpUtil.sendGetRequest("Android", 1, 10, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseData = response.body().string();
Log.d("MainActivity", responseData);
}
});
}
}
这里我们传递了三个参数:类型为 "Android",第一页,每页有10条数据。回调函数中的 response.body().string()
方法获取到了请求返回的数据,并打印到了控制台中。
下面是一个 Post 请求的示例,我们同样可以在 onCreate()
方法中调用 HttpUtil
类中的 sendPostRequest
方法来发送异步 Post 请求:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HttpUtil.sendPostRequest("Tom", 20, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseData = response.body().string();
Log.d("MainActivity", responseData);
}
});
}
}
这里我们传递了两个参数:name 为 "Tom",age 为 20。回调函数中的 response.body().string()
方法同样可以获取到请求返回的数据,并打印到了控制台中。
至此,我们就完成了 okHttp 的 get 和 post 请求的封装以及使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android实现okHttp的get和post请求的简单封装与使用 - Python技术站