android - 改造 - @Part MultipartBody.Part 未触发 API
问题描述
改造调用适用于我的 API,例如:
@POST("addeventphoto")
Call<NewPhotoObject> listRepos(@Query("key1") String testKey);
RetrofitInterfaces.IPostNewMessage service = RetrofitClientInstance.getRetrofitInstance().create(RetrofitInterfaces.IPostNewMessage.class);
Call<NewPhotoObject> call = service.listRepos("hello");
call.enqueue(new Callback<NewPhotoObject>() {
@Override
public void onResponse(Call<NewPhotoObject> call, Response<NewPhotoObject> response) {
Log.d(TAG, "onResponse: " + response.body());
if(response.isSuccessful() && response.body() != null){
Log.d(TAG, "onResponse: " + response.body().getEvent_photo());
}
}
@Override
public void onFailure(Call<NewPhotoObject> call, Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
});
我的 API 被触发,我得到了回复。然而,一旦我添加@Multipart
到我的改造界面......我的 API 不再被触发。
@Multipart
@POST("addeventphoto")
Call<NewPhotoObject> listRepos(@Query("key1") String testKey, @Part MultipartBody.Part image);
我是否错误地使用改造?当前版本:
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
编辑:与 MultipartBody.Part 一起使用
File file = new File(imagePath);
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
RetrofitInterfaces.IPostNewMessage service = RetrofitClientInstance.getRetrofitInstance().create(RetrofitInterfaces.IPostNewMessage.class);
Call<NewPhotoObject> call = service.listRepos("hello", body);
call.enqueue(new Callback<NewPhotoObject>() {
@Override
public void onResponse(Call<NewPhotoObject> call, Response<NewPhotoObject> response) {
Log.d(TAG, "onResponse: " + response.body());
if(response.isSuccessful() && response.body() != null){
Log.d(TAG, "onResponse: " + response.body().getEvent_photo());
}
}
@Override
public void onFailure(Call<NewPhotoObject> call, Throwable t) {
Log.d(TAG, "onFailure: " + t);
}
});
解决方案
我使用的是 API Gateway + Lambda,您需要手动启用二进制支持才能接受MultipartBody.Part
类型。这就是它成功发送的原因,但我的 API 没有被触发。
推荐阅读
- javascript - 使用 JavaScript 显示隐藏的 html 按钮
- r - R:将具有相邻排名的多个项目配对到新列中
- encoding - 运行长度编码问题 - 有 [ ] 需要 ( )
- python - Geopandas 地图分层
- javascript - 在网络服务器上使用套接字 io
- javascript - 如何将此 github 的内容实现到我的网站中?我对javascript不太了解
- compiler-errors - 在 Jack 语言中编译错误“预期 [或 =”。错误在哪里,为什么?
- matlab - 执行最小二乘分析时如何添加新的数字列?
- firebase - 将 Google Firebase Golang 库(例如 IAP 和 Firestore)用于非管理员客户端应用程序
- javascript - Ajax 方法,未定义变量,两种可能的解决方案?