如何使用改造 Android 使用动态参数调用 api?
How to call api with dynamic parameter using retrofit Android?
我正在尝试 POST 使用改装库将数据发送到服务器。 Api 包括参数的动态数量,如:
https:xyz.com/skill-add?skill[0]=10&skill1=11&skill[2]=12&skill[3]=267
这里是邮递员SS:
我不知道如何使用 api 这样的。
你能帮帮我吗?
请尝试以下 3 种方式与 @QueryMap 接口 Map params prefer to send dynamic data 可能会对您有所帮助
public class ApiClient {
static WebApiService webApiService;
public static WebApiService getWebApiService(){
if(webApiService == null){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
try {
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("Authorization","Bearer "+getUserAccessToken())
.addHeader("access-token",getUserAccessToken())
.addHeader("device-type", "android")
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
}catch (Exception e){
e.printStackTrace();
}
OkHttpClient okHttpClient = httpClient.addInterceptor(interceptor).connectTimeout(60, TimeUnit.SECONDS).
readTimeout(60, TimeUnit.SECONDS).
writeTimeout(60, TimeUnit.SECONDS)
.build();
String baseUrl = "https:xyz.com/";//put this in build.gradel and get from build config
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
webApiService = retrofit.create(WebApiService.class);
}
return webApiService;
}
}
public interface WebApiService {
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@Body Map<String, String> params);
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@QueryMap Map<String, String> params);
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@Query("skill[0]") int skill0,@Query("skill[1]") int skill1,@Query("skill[2]") String skill2);
}
try {
CompositeDisposable compositeDisposable = new CompositeDisposable();
compositeDisposable.add(ApiClient.getWebApiService().addskill(/*parameterhhere in your way*/)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResults, this::handleError));
} catch (Exception e) {
e.printStackTrace();
}
HashMap<String,String> params = new HashMap<>();
int i = 0;
params.put("skill["+i+"]","0");
我正在尝试 POST 使用改装库将数据发送到服务器。 Api 包括参数的动态数量,如:
https:xyz.com/skill-add?skill[0]=10&skill1=11&skill[2]=12&skill[3]=267
这里是邮递员SS:
我不知道如何使用 api 这样的。
你能帮帮我吗?
请尝试以下 3 种方式与 @QueryMap 接口 Map
public class ApiClient {
static WebApiService webApiService;
public static WebApiService getWebApiService(){
if(webApiService == null){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
try {
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("Authorization","Bearer "+getUserAccessToken())
.addHeader("access-token",getUserAccessToken())
.addHeader("device-type", "android")
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
}catch (Exception e){
e.printStackTrace();
}
OkHttpClient okHttpClient = httpClient.addInterceptor(interceptor).connectTimeout(60, TimeUnit.SECONDS).
readTimeout(60, TimeUnit.SECONDS).
writeTimeout(60, TimeUnit.SECONDS)
.build();
String baseUrl = "https:xyz.com/";//put this in build.gradel and get from build config
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
webApiService = retrofit.create(WebApiService.class);
}
return webApiService;
}
}
public interface WebApiService {
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@Body Map<String, String> params);
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@QueryMap Map<String, String> params);
@POST("skill-add")
Observable<Response<ResponseBody>> addskill(@Query("skill[0]") int skill0,@Query("skill[1]") int skill1,@Query("skill[2]") String skill2);
}
try {
CompositeDisposable compositeDisposable = new CompositeDisposable();
compositeDisposable.add(ApiClient.getWebApiService().addskill(/*parameterhhere in your way*/)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::handleResults, this::handleError));
} catch (Exception e) {
e.printStackTrace();
}
HashMap<String,String> params = new HashMap<>();
int i = 0;
params.put("skill["+i+"]","0");