Retrofit 2 是一个用于 Android 和 Java 的 RESTful API 客户端库,它简化了与 Web 服务的交互。使用 Retrofit 2 上传图像和数据可以通过创建一个接口定义上传方法,并使用 @Multipart
和 @Part
注解来实现。
@Multipart
和 @Part
注解来处理 multipart 请求。以下是一个使用 Retrofit 2 上传图像和数据的示例:
在 build.gradle
文件中添加 Retrofit 和 OkHttp 的依赖:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
public class DataModel {
private String name;
private String description;
// Getters and setters
}
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
public interface ApiService {
@Multipart
@POST("upload")
Call<ResponseBody> uploadImageAndData(
@Part MultipartBody.Part image,
@Part("name") RequestBody name,
@Part("description") RequestBody description
);
}
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
import android.net.Uri;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class UploadHelper {
private ApiService apiService;
public UploadHelper(String baseUrl) {
apiService = RetrofitClient.getClient(baseUrl).create(ApiService.class);
}
public void uploadImageAndData(Uri imageUri, String name, String description) {
File file = new File(imageUri.getPath());
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part imagePart = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
RequestBody namePart = RequestBody.create(MediaType.parse("text/plain"), name);
RequestBody descriptionPart = RequestBody.create(MediaType.parse("text/plain"), description);
Call<ResponseBody> call = apiService.uploadImageAndData(imagePart, namePart, descriptionPart);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
// Handle success
} else {
// Handle error
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
// Handle failure
}
});
}
}
imageUri.getPath()
返回的路径是正确的。AndroidManifest.xml
中添加了网络权限:AndroidManifest.xml
中添加了网络权限:通过以上步骤,你可以使用 Retrofit 2 库上传图像和数据。希望这个示例对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云