Articles of retrofit2

改造2 RequestBody writeTo()方法调用两次

改造2 RequestBody writeTo()方法调用两次,我使用的代码如下: ProgressRequestBody requestVideoFile = new ProgressRequestBody(videoFile, new ProgressRequestBody.UploadCallbacks() { VideoUploadStore store = new VideoUploadStore(); @Override public void onProgressUpdate(int percentage) { if (!mIsCancelled) { Log.i("UploadServiceManager", "Read Percentage : " + percentage); data.setUploadPercentage(percentage); store.updateUploadData(data); } } @Override public void onError() { if(!mIsCancelled) { data.setUploadPercentage(0); store.updateUploadData(data); } } @Override public void onFinish() { } }); MultipartBody.Part […]

改进2多部分POST请求向PHP发送额外的引号

使用Retrofit 2.0.1,在Android App中定义的API接口中有一个调用函数: @Multipart @POST("api.php") Call<ResponseBody> doAPI( @Part("lang") String lang, @Part("file\"; filename=\"image.jpg") RequestBody file ); 我发送这样的请求: Call call = service.doAPI(“eng”,imageFile); imageFile是一个使用File对象创build的RequestBody 。 上传图片部分没有问题,而@Part("lang") String lang部分在服务器中有额外的引号。 在PHP方面,它是这样写的: $lang = trim($_POST['lang']); 返回"eng" 。 为什么有一个额外的双引号包围了string? 当然我可以去掉尾随和引导的双引号,但是这样做很奇怪 相关问题: https : //github.com/square/retrofit/issues/1210

Dagger +翻新dynamicurl

问题 我需要从USERinput的域调用API,我需要在调用插入的数据之前编辑我的Retrofit单例。 有没有办法“重置”我的单身,迫使它重新创build? 要么 有没有办法更新我的baseUrl与我的数据(也许在拦截?)就在通话之前? 码 单身 @Provides @Singleton Retrofit provideRetrofit(SharedPreferences prefs) { String apiUrl = "https://%1s%2s"; apiUrl = String.format(apiUrl, prefs.getString(ACCOUNT_SUBDOMAIN, null), prefs.getString(ACCOUNT_DOMAIN, null)); OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new HeaderInterceptor()) .build(); return new Retrofit.Builder() .baseUrl(apiUrl) .addConverterFactory(GsonConverterFactory.create()) .client(httpClient) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); } @Provides @Singleton API provideAPI(Retrofit retrofit) { return retrofit.create(API.class); } API @FormUrlEncoded @POST("endpoint") Observable<Response> logIn(@Field("login") […]

用@multipart改造@body有问题

类types对象中的图像多部分。 案例1(我已经完成了) 服务参数: {"id":"1","name":"vishal","image/file":""} 那时候我的API Retrofit @Multipart @POST("webservice") Call<SignUpResp> loadSignupMultipart(@Part("description") RequestBody description, @Part MultipartBody.Part file, @QueryMap HashMap<String, String> params); 案例2.(我有问题)与@Body class<UploadwithImage> { "methodName":"submitLevel1Part2Icon", "userid":"150", "headerData":{ "fiction":{ "icon_type":"1", "icon_id":"3"}, "nonfiction":{ "icon_type":"2", "icon_id":"4"}, "relation":{ "icon_type":"3", "icon_id":"0", "name":"Ronak", "relative_image":"<File>", "relation_id":"3"}, "self":{ "icon_type":"4", "icon_id":"0"} } } 我正在尝试这个API @Multipart @POST("webservice") Call<SubmitLevel1Part2IconResp> loadLevel1halfIconswithImage(@Part("description") RequestBody description, @Part MultipartBody.Part file, @Body UploadwithImage uploadImage); […]

Retrofit2 proguard删除参数

我使用改进2和在我的项目中使用proguard。 我的proguard: -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } # Begin twitter 4j. -dontwarn twitter4j.** -keep class twitter4j.conf.PropertyConfigurationFactory -keep class twitter4j.** { *; } # End twitter 4j. # Start androidsocialnetworks -keep class com.androidsocialnetworks.lib.** { *; } # End androidsocialnetworks. # Google api […]

IllegalArgumentException:找不到rx.Observable RxJava调用适配器,Retrofit2

我在调用其余api时遇到了上述错误。 我正在使用retrofit2和RxJava。 ServiceFactory.java public class ServiceFactory { public static <T> T createRetrofitService(final Class<T> clazz, final String endpoint){ Retrofit retrofit = new Retrofit.Builder() .baseUrl(endpoint) //.addConverterFactory(GsonConverterFactory.create()) .build(); T service = retrofit.create(clazz); return service; } } MovieService.java public interface MovieService{ //public final String API_KEY = "<apikey>"; public final String SERVICE_END = "https://api.mymovies.org/3/"; @GET("movie/{movieId}??api_key=xyz") Observable<Response<Movies>> getMovies(@Field("movieId") int movieId); } […]

Retofit2错误java.io.EOFException:行1列1的input结束

我使用Retrofit2调用了PATCH Web服务,但未调用onResponse并调用onFailure 尽pipe服务器的操作在服务器端完全成功 每当我试图使用提琴手检查服务的工作,我发现问题是序列化服务即将到来的响应和使用小提琴手时,我发现没有内容的JSON响应,所以改装服务假设其失败,因为没有内容,它不能序列化EMPTY内容,并给我这个错误 java.io.EOFException: End of input at line 1 column 1 小提琴原始的回应 HTTP/1.1 200 OK Server: nginx/1.9.4 Date: Wed, 02 Mar 2016 09:55:55 GMT Content-Type: application/json Content-Length: 0 Connection: close Status: 200 OK X-Content-Type-Options: nosniff 提琴手Json响应是空的 在java中的webservice Call<Object> call = TimeCapp.services.accept_invited_alerts(HomeActivity.api_token, alert_id); call.enqueue(new Callback<Object>() { @Override public void onResponse(Call<Object> call, Response<Object> response) { […]

Retrofit 2使用HttpLoggingInterceptor.Level.BODY在日志中打印空响应主体

我使用Retrofit 2.0.0 。 这是构build我的HTTP客户端的代码 protected OkHttpClient getHttpClient(){ OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addInterceptor( chain -> { Request original = chain.request(); Request.Builder requestBuilder = original.newBuilder(); requestBuilder.header("Accept-Language", App.getInstance().getPrefs().getSelectedLanguage().toLowerCase()); requestBuilder.header("Accept-Encoding", "gzip"); if(API.this instanceof PrivateAPI){ LoginResponse loginResponse = AuthManager.getInstanse().getLoginResponse(); requestBuilder.header("Authorization", String.format("%s %s", loginResponse.getTokenType(), loginResponse.getAccessToken())); } requestBuilder.method(original.method(), original.body()); Request request = requestBuilder.build(); return chain.proceed(request); }); if(BuildConfig.DEBUG){ HttpLoggingInterceptor loggingInterceptor = new […]

改进与仿真器和networking相比,在真实的android设备中响应时间更慢

我正在从Android设备进行一个安静的API调用来填充列表视图。 我用swagger codegen生成我的翻新客户端。 匕首2dependency injection 设备:华硕Zenfone 5 我试图从邮差,networking和模拟器(genymotion)打电话,它比真实的设备要快得多。 而有趣的是,每次当我重新启动我的手机两三个请求的响应时间是正常的,然后变慢。 我读了一些关于okHTTP的gzip压缩的博客,并试图实现,但没有效果。 如果有人能帮我弄清楚这个问题,那真的很有帮助。

如何在android中的Retrofit 2的“Body”参数中传递string

@POST("api/login") Call<ApiResponse> loginUser(@Body String user); 这里的string实际上是一个JSONstring ie {"email":"test@gmail.com","password":"test"} 无法弄清楚什么是错的。 要么再次转换为json的string。 请build议.. 这是我想要做的,如图所示我的要求。