Articles of retrofit2

指令’monitor-enter v1’期间出现空指针exception

我现在每次都会收到这个错误 inside public void onResponse(呼叫,响应响应){ : mContext.runOnUiThread(new Runnable() { @Override public void run() { LocalDBUtility local=LocalDBUtility.getInstance(); //code } 在我的单例类LocalDBUtility中 static LocalDBUtility localDBUtility; private LocalDBUtility(){ } public static LocalDBUtility getInstance(){ if(localDBUtility==null){ synchronized (localDBUtility) { localDBUtility = new LocalDBUtility(); } return localDBUtility; }else { return localDBUtility; } } 我想知道是什么导致了NPE? 堆栈跟踪: java.lang.NullPointerException: Null pointer exception during instruction ‘monitor-enter […]

如何在每次改装API调用中自动显示Progress Bar?

如何在每个Retrofit 2.0 API调用上显示进度条,而无需在每个活动中创建进度条,显示和解除。 进度条应该在 API被命中时显示,并且当我们在onResponse上获得响应或者调用onFailure时它应该被忽略。 我试过这个: ProgressDialog mProgressDialog = new ProgressDialog(this); mProgressDialog.setIndeterminate(true); mProgressDialog.setMessage(“Loading…”); mProgressDialog.show(); retrofitService.login(new SignInRequest(email, password), new Callback() { @Override public void onResponse(Call call, Response response) { if (mProgressDialog.isShowing()) mProgressDialog.dismiss(); } @Override public void onFailure(Call call, Throwable t) { if (mProgressDialog.isShowing()) mProgressDialog.dismiss(); } }); 但是每当我进行API调用时,这段代码都必须在任何地方粘贴。 我不想要重复的代码。

Android – Retrofit 2 – 身份validation器结果

我正在尝试使用Retrofit(2.0.0-beta3),但是当使用Authenticator添加令牌时,我似乎无法从同步调用中获取数据。 我们在后端的日志记录只显示了很多登录尝试,但我无法从正文中获取实际添加到标题的数据。 public static class TokenAuthenticator implements Authenticator { @Override public Request authenticate(Route route, Response response) throws IOException { // Refresh your access_token using a synchronous api request UserService userService = createService(UserService.class); Call call = userService.emailLogin(new Credentials(“handle”, “pass”)); // This call is made correctly, as it shows up on the back-end. Session body = call.execute().body(); […]

Retrofit 2.x:请求和响应的日志标头

我正在使用改造2.x,我想记录请求和响应的标题和正文。 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(interceptor) .addInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR) .addNetworkInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request().newBuilder() .addHeader(“key”, “value”) .addHeader(“HEADER”,”HEADER Value”) .build(); return chain.proceed(request); } }).build(); 这就是我正在做的,我的问题是请求的标题没有记录在Android监视器,但rest一切都记录下来。 Gradle版本 compile (‘com.squareup.retrofit2:retrofit:2.0.0-beta3’) { // exclude Retrofit’s OkHttp peer-dependency module and define your own module import […]

如何制作RxErrorHandlingCallAdapterFactory?

我find了这个 。 但是在新的ver compile ‘com.squareup.retrofit2:adapter-rxjava:2.2.0’在CallAdapter它有两个参数CallAdapter 如何修改RxCallAdapterWrapper以implement来自CallAdapter

如何获得原始的Retrofit响应字符串?

我正在进行Retrofit,但我坚持一件事:如何在响应体上获得原始JSON。 public interface ViewMenuItems { @GET Call listRepos(@Url String url); } ViewMenuItems viewMenuItems = ApiClient.getClient().create(ViewMenuItems.class); Call responseBodyCall = viewMenuItems.listRepos(Webservices.MERCHANT + merchantId + Webservices.MENU_ITEMS_LASTMODIFIED); responseBodyCall.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { Log.d(“MenuItems”, “Response :: ” + response.body().toString()); } @Override public void onFailure(Call call, Throwable t) { Log.d(“MenuItems”, “Exception :: ” + t.toString()); […]

RxJava / Retrofit – 如何强制用户使用Subscriber的特定子类?

在使用rx.Observable之前,我使用了一个带有改进的自定义回调,因此我可以添加一些特定的逻辑来处理响应/错误,而不必在回调中为每个请求作为样板代码执行此操作。 我强制用户通过将它放在方法签名中来使用自定义回调,如下所示: @GET(“/user_endpoint/”) void getUser(CustomCallback callback); @GET(“/profile_endpoint/”) void getProfile(CustomCallback callback); 但现在我正在返回一个Observable : @GET(“/user_endpoint/”) Observable getUser(); @GET(“/profile_endpoint/”) Observable getProfile(); 我无法find一种方法来确保自定义回调始终代理错误/响应。 另外,使用retrofit2.0,如何强制用户使用返回的Call对象进行自定义回调? CustomCallback供参考: public abstract class CustomCallback implements Callback { @Override public final void success(T t, Response response) { // do some logic onSuccess(t); } @Override public final void failure(RetrofitError error) { // do something with the […]

使用robospice-retrofit和getstream.io时没有这样的方法错误

在我们的项目中,我们使用com.octo.android.robospice:robospice-retrofit:1.4.14,这需要okhttp:1.6.0 和getstream java客户端 io.getstream.client:stream-repo-okhttp:1.2.2’,这需要okhttp:2.2.0所以这里gradle正在接收,2.2.0并给出以下错误,因为该方法在2.2.0中不可用 java.lang.NoSuchMethodError: No virtual method open(Ljava/net/URL;)Ljava/net/HttpURLConnection; in class Lcom/squareup/okhttp/OkHttpClient; or its super classes (declaration of ‘com.squareup.okhttp.OkHttpClient’ appears in /data/app/com.#########.apk) at com.squareup.okhttp.OkUrlFactory.open(OkUrlFactory.java:44) at retrofit.client.OkClient.openConnection(OkClient.java:45) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:36) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:811) 如果我从流库中排除2.2.0版本。它给出了以下错误,因为该方法在1.6.0中不可用 java.lang.NoSuchMethodError: No virtual method setWriteTimeout(JLjava/util/concurrent/TimeUnit;)V in class Lcom/squareup/okhttp/OkHttpClient; or its […]

在retryOn时将Retrofit2与rx一起使用时出现InterruptedIOException

我正在使用rx-android改装2 我有相当复杂的重试逻辑, 部分工作 。 我切断了不相关的代码来简化它。 这里是: public class RetryWithDelay implements Func1<Observable, Observable>, Constants { @Override public Observable call(Observable attempts) { return attempts.flatMap(new Func1<Throwable, Observable>() { @Override public Observable call(Throwable throwable) { int statusCode = 500; if (throwable instanceof HttpException) { HttpException httpException = (HttpException) throwable; statusCode = httpException.code(); } boolean shouldRetry = shouldRetry(); if (shouldRetry […]

将JSON反序列化反序列化为其原始副本的$ ref引用

我使用Microsoft.Net和Breeze for API,我使用Retrofit得到的结果嵌套了重复的相同对象。 例如,EmployeeJob具有Customer导航属性,因此API结果如下所示 { Id:1, “Customer_Id”: 39, “Customer”: { “$id”: “2”, “$type”: “Wit.Trade.Entities.Customer, Wit.Trade”, “CourtesyTitle”: “Mr”, “FirstName”: “Ahmad” } } { Id:2 “Customer_Id”: 39, “Customer”: { “$ref”: “2” //here same customer Ahmad }, } 现在我得到的这些EmployeeJobs的Java List在第一条记录中只有Customer而其他的则没有。 如何将$ref:”2″映射到其原始值而不是$ref 。 我不希望我的服务器API出于网络和性能原因发送完整的对象,这就是为什么我想在客户端反序列化这些$refs ,就像Angularjs $resource service为我们做的那样。