下面是一个使用Retrofit进行多部分请求的示例代码:
首先,首先确保你已添加以下依赖项到你的build.gradle
文件中:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1'
然后,创建一个ApiService
接口来定义你的API请求:
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("your_endpoint")
Call uploadFile(
@Part("description") RequestBody description,
@Part MultipartBody.Part file);
}
接下来,创建一个RetrofitClient
类来创建Retrofit实例:
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit;
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// 添加日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.addInterceptor(loggingInterceptor);
retrofit = new Retrofit.Builder()
.baseUrl("your_base_url")
.addConverterFactory(GsonConverterFactory.create())
.client(builder.build())
.build();
}
return retrofit;
}
}
最后,在你的代码中使用这些类来发送多部分请求:
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
private ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
apiService = RetrofitClient.getRetrofitInstance().create(ApiService.class);
// 创建文件描述
RequestBody description = RequestBody.create(MediaType.parse("text/plain"), "Your file description");
// 创建文件的 RequestBody
File file = new File("your_file_path");
RequestBody fileRequest = RequestBody.create(MediaType.parse("image/*"), file);
MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", file.getName(), fileRequest);
// 发送多部分请求
Call call = apiService.uploadFile(description, filePart);
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
// 请求成功处理
}
@Override
public void onFailure(Call call, Throwable t) {
// 请求失败处理
}
});
}
}
请注意,上述示例为了简化表达,只上传了一个文件部分。你可以根据你的需求添加更多的部分。