Articles of retrofit2

Retrofit2 error java.io.EOFException:第1行第1列的输入结束

我使用Retrofit2调用了PATCH Web服务但是没有调用onResponse而且调用了onFailure 尽管服务的操作在服务器端完成了 每当,我试图使用fiddler来检查服务的工作情况,我发现问题是序列化即将到来的服务响应,当使用fiddler时,我发现没有JSON响应的内容,所以Retrofit服务认为它失败了,因为没有内容,它无法序列化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 Fiddler Json的回应是空的 java中的webservice Call call = TimeCapp.services.accept_invited_alerts(HomeActivity.api_token, alert_id); call.enqueue(new Callback() { @Override public void onResponse (Call call, Response […]

如何在Retrofit 2中上传图像文件

我有一个像下面的邮递员的形象。 如何在Retrofit 2中做同样的事情。 我已经宣布了这样的界面。 @Multipart @POST(“/api/Pharmarcy/UploadImage”) Call uploadPrescriptionImage( @Query(“accessToken”) String token, @Query(“pharmarcyRequestId”) int pharmacyRequestedId, @Part MultipartBody.Part image);

改造2 @path Vs @query

我是新手改造2库。我读了几篇文章作为初学者入门,我设法从我的RESTful API中获取XML数据而不指定参数。在我的方法中生成XML资源如下。 @GET @Path(“/foods”) @Produces(MediaType.APPLICATION_XML) public List getFoodPyramid() { Session session = HibernateUtil.getSessionFactory().openSession(); trans = session.beginTransaction(); List foodList = session.createQuery(“from FoodPyramid”).list(); try { trans.commit(); session.close(); } catch (Exception e) { session.close(); System.err.println(“Food Pyramid fetch ” + e); } System.err.println(“Am in the food modal. . . . . . . .”); return foodList; } 现在当我试图在界面中传递参数时 @GET(“user/{username}/{password}”) […]

改造“IllegalStateException:已经执行”

我有一个Retrofit网络调用,每隔5秒运行一次。 我目前的代码: Handler h = new Handler(); int delay = 5000; //milliseconds h.postDelayed(new Runnable() { public void run() { call.enqueue(new Callback() { @Override public void onResponse(Response response) { Log.d(“api”, “response: ” + response.body().getPosition().getLatitude().toString()); } @Override public void onFailure(Throwable t) { } }); h.postDelayed(this, delay); } }, delay); 这运行一次,但随后抛出以下内容: java.lang.IllegalStateException:已经执行。 at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:52)at retrofit2.ExecutorCallAdapterFactory $ ExecutorCallbackCall.enqueue(ExecutorCallAdapterFactory.java:57)at orbyt.project.MyFragment […]

我们如何使用Retrofit 2处理不同的响应types?

我有一个webservice,它返回一个序列化的MyPOJO对象列表: [ { //JSON MyPOJO }, { //JSON MyPOJO } ] 要么是错误对象: { ‘error’: ‘foo’, ‘message’:’bar’ } 使用retrofit2,我该如何检索错误? Call<List> request = … request.enqueue(new Callback<List>() { @Override public void onResponse(Response<List> response) { if (response.isSuccess()) { List myList = response.body(); // do something with the list… } else { // server responded with an error, here is […]

如何进行多个请求并等待数据来自retrofit 2.0中的所有请求 – android

当前代码: Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constant.BASEURL) .addConverterFactory(GsonConverterFactory.create()) .build(); APIService service = retrofit.create(APIService.class); Call call = service.getNewsData(); call.enqueue(new Callback() { @Override public void onResponse(Call call1, Response response) { if (response.isSuccess()) { ResponseWrap finalRes = response.body(); for(int i=0; i<finalRes.getResponse().getResults().size(); ++i){ String title = finalRes.getResponse().getResults().get(i).getWebTitle(); News n = new News(titleCategory, title, null); newsList.add(n); } AdapterRecommendation adapter = […]

改造日志拦截器exception

我正在尝试使用Retrofit启用Logging但我收到此exception: 07-13 12:44:53.278 28698-29248/com.xxxx.debug E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher Process: com.xxxx.debug, PID: 28698 java.lang.NoSuchMethodError: No virtual method log(Ljava/lang/String;)V in class Lokhttp3/internal/Platform; or its super classes (declaration of ‘okhttp3.internal.Platform’ appears in /data/data/com.xxxx.debug/files/instant-run/dex/slice-realm-optional-api_16b022358933b490d810e358ea76b13cd4d88163-classes.dex) at okhttp3.logging.HttpLoggingInterceptor$Logger$1.log(HttpLoggingInterceptor.java:109) at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:157) at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) at com.xxxx.api.RetrofitClient$1.intercept(RetrofitClient.java:59) at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:190) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) at okhttp3.RealCall.access$100(RealCall.java:30) at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127) at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) […]

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