Articles of retrofit2

改造2:从响应机构获取JSON

我想使用改装2从我的api获取字符串json,使用改装1获取此json时我没有问题,但使用retrofit 2为我返回null 。 这就是我的json的样子 {“id”:1,”Username”:”admin”,”Level”:”Administrator”} 这是我的API @FormUrlEncoded @POST(“/api/level”) Call checkLevel(@Field(“id”) int id); 这就是我的代码的样子 Retrofit retrofit = new Retrofit.Builder() .baseUrl(Config.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); Api api = retrofit.create(Api.class); Call call = api.checkLevel(1); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { JsonObject post = new JsonObject().get(response.body().toString()).getAsJsonObject(); if (post.get(“Level”).getAsString().contains(“Administrator”)) { } } @Override public void onFailure(Call call, […]

使用Retrofit 2.0和Dagger 2设置动态基本URL

我正在尝试使用Dagger 2使用Retrofit 2.0执行登录操作 这是我如何设置Retrofit依赖 @Provides @Singleton Retrofit provideRetrofit(Gson gson, OkHttpClient client) { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create(gson) .client(client) .baseUrl(application.getUrl()) .build(); return retrofit; } 这是API接口。 interface LoginAPI { @GET(relative_path) Call logMe(); } 我有三个不同的基本url用户可以登录。 因此,在设置Retrofit依赖项时,我无法设置静态URL。 我在Application类上创建了一个setUrl()和getUrl()方法。 用户登录后,我在调用API调用之前将url设置为Application。 我像这样使用懒惰注射进行改造 Lazy retrofit 这样,只有当我可以打电话时,Dagger才会注入依赖关系 retrofit.get() 这部分效果很好。 我把url设置为改进依赖。 但是,当用户键入错误的基本URL(例如,mywifi.domain.com)时,会出现问题,理解它是错误的并更改它(比如mydata.domain.com)。 由于Dagger已经为改造创建了依赖关系,因此不会再做了。 所以我必须重新打开应用程序并输入正确的URL。 我阅读了不同post,使用Dagger在Retrofit上设置动态url。 在我的案例中,没有什么比这更好的了。 我想念什么吗?

改造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 […]