依赖
//okhttp
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
Android 使用OKhttp 上传图片和文字
第一步
OkHttpClient client = new OkHttpClient();
第二步
MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
File file = new File(“全路径”);
RequestBody body = RequestBody.create(MediaType.parse("image/*"), file);
String filename = file.getName();
//后台需要的参数
requestBody.addFormDataPart("type","0");
//file: 后台需要的文件的key值
requestBody.addFormDataPart("file", filename, body);
第三步
Request request = new Request.Builder().url("").post(requestBody.build()).tag(requireActivity()).build();
// readTimeout("请求超时时间" , 时间单位);
client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("lfq" ,"onFailure");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String str = response.body().string();
Log.i("lfq", response.message() + " , body " + str);
} else {
Log.i("lfq" ,response.message() + " error : body " + response.body().string());
}
}
});
Android 使用retrofit上传图片和文字
TestService testService = RetrofitClient.getInstance().create(TestService.class);
testService.upLoadFile(requestBody.build())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseDataBean>() {
@Override
public void onSubscribe(@NotNull Disposable d) {
}
@Override
public void onNext(@NotNull BaseDataBean s) {
Log.e("-------------------", "==============" + s);
}
@Override
public void onError(@NotNull Throwable e) {
}
@Override
public void onComplete() {
}
});
Retrofit实例
/**
* Retrofit 获取单列
*/
public class RetrofitClient {
public volatile static Retrofit retrofit = null;
public static Retrofit getInstance() {
if (retrofit == null)
synchronized (RetrofitClient.class) {
if (retrofit == null) {
retrofit = getRetrofit();
}
}
return retrofit;
}
public static OkHttpClient getOkHttpClient() {
OkHttpClient.Builder builder = new OkHttpClient.Builder()
//设置超时
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
//错误重连
.retryOnConnectionFailure(true)
//需要对请求参数进行处理的时候添加
// .addInterceptor(new ParameterInterceptor())// 拦截器
.addInterceptor(loggingInterceptor);
return builder.build();
}
public static HttpLoggingInterceptor loggingInterceptor =
new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//打印retrofit日志
Log.e("RetrofitLog", message + "");
}
}).setLevel(HttpLoggingInterceptor.Level.BODY);
public static Retrofit getRetrofit() {
return new Retrofit.Builder().baseUrl("")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(getOkHttpClient())
.build();
}
public static <T> T getAPIService(Class<T> service) {
return getInstance().create(service);
}
public static TestService getTestService() {
return getAPIService(TestService.class);
}
}
TestService 实例
public interface TestService {
//上传文件
@POST("")
Observable<BaseDataBean> upLoadFile(@Body MultipartBody requestBody);
}