Tag: retrofit

Android:无法从String值构造java.sql.Timestamp的实例

我开发了一个REST API,我正在尝试使用Android连接到它。 以下是我的代码。 private void restCall() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(URL) .addConverterFactory(GsonConverterFactory.create()) .build(); YourEndpoints request = retrofit.create(YourEndpoints.class); SetupBean setupBean = new SetupBean(); setupBean.setIdPatient(1); setupBean.setCircleType(1); setupBean.setFamiliarity(1); setupBean.setValence(2); setupBean.setArousal(3); setupBean.setDateCreated(Common.getSQLCurrentTimeStamp()); setupBean.setLastUpdated(Common.getSQLCurrentTimeStamp()); Call yourResult = request.insertSetup(setupBean); yourResult.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { try { Log.d(“MainActivity”, “RESPONSE: ” + response.errorBody().string()); } catch(Exception […]

如何使用Retrofit和RxJava / RxAndroid处理响应错误?

我无法通过改造和RxAndroid来解决如何处理响应错误的问题。 如果出现网络错误等,则调用onError(),但我需要能够获得响应以检查是否存在身份validation错误。 相反,我得到的是一个带有空字符串的令牌,我找不到原因。 最好的方法是什么? 这是我目前的RxAndroid电话。 Client.getInstance().getService() .getToken(usernameET.getText().toString(), passwordET.getText().toString()) .subscribe(new Subscriber() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); } @Override public void onNext(SiteInfo siteInfo) { Log.d(TAG, “onNext “+ token.toString()); } }); 这是我的改造服务 @GET(“my_url_here”) Observable getToken( @Query(“username”) String username, @Query(“password”) String password ); 这是我当前的restadapter RestAdapter restAdapter = new RestAdapter.Builder() .setLogLevel(RestAdapter.LogLevel.FULL) […]

当回复有时是一个对象而有时是一个数组时,如何在使用改进时解析JSON回复?

我正在使用Retrofit来获取JSON回复。 以下是我实施的部分内容 – @GET(“/api/report/list”) Observable listBill(@Query(“employee_id”) String employeeID); 和class级比尔是 – public static class Bills { @SerializedName(“report”) public ArrayList billItems; } BillItem类如下 – public static class BillItem { @SerializedName(“id”) Integer entryID; @SerializedName(“employee_id”) Integer employeeDBID; @SerializedName(“type”) String type; @SerializedName(“subtype”) String subtype; @SerializedName(“date”) String date; @SerializedName(“to”) String to; @SerializedName(“from”) String from; @SerializedName(“amount”) Double amount; @SerializedName(“location”) String location; @SerializedName(“remark”) […]

如何使用RXJava Observables处理用于填充模型的多个请求?

我们在网络堆栈中使用ReactiveX和Retrofit以异步方式处理所有API请求。 我们的目标是创建一个返回完全填充的User模型集合的方法。 每个User模型都有一个Pet对象列表。 我们可以通过一个请求获取所有User模型。 但是,每个User需要请求Pet模型。 获得用户很简单: // Service.java @GET(“users/?locationId={id}”) Observable<List> getUsersForLocation(@Path(“id”) int locationId); @GET(“pets/?userId={id}”) Observable<List> getPetsForUser(@Path(“id”) int userId); // DataManager.java public Observable<List> getUsersForLocation(int locationId) { return api.getUsersForLocation(locationId); } public Observable<List> getPetsForUser(int userId) { return api.getPetsForUser(userId); } 我们希望找到一些方便的(RX风格)循环User列表的方法,为每个用户获取Pet ,将它们分配给User并最终返回Observable<List> 。 我对RX很新。 我查看了文档,并尝试使用各种方法,如flatMap()和zip ,但是,我还没有找到变换或组合的确切组合来实现它。

Retrofit 2 – 在api级别添加标头的优雅方式

我的Retrofit 2(当前2.0.2 )客户端需要为请求添加自定义标头。 我正在使用Interceptor将这些标头添加到所有请求中: OkHttpClient httpClient = new OkHttpClient(); httpClient.networkInterceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { final Request request = chain.request().newBuilder() .addHeader(“CUSTOM_HEADER_NAME_1”, “CUSTOM_HEADER_VALUE_1”) .addHeader(“CUSTOM_HEADER_NAME_2”, “CUSTOM_HEADER_VALUE_2”) … .addHeader(“CUSTOM_HEADER_NAME_N”, “CUSTOM_HEADER_VALUE_N”) .build(); return chain.proceed(request); } }); Retrofit retrofitClient = new Retrofit.Builder() .baseUrl(baseUrl) .client(httpClient) .build(); 我总是想添加一些标头,但是我只需要根据特定端点的要求添加一些标头,例如用户是否需要进行身份validation。 我希望能够在api级别控制它,例如使用注释,例如: public interface MyApi { @NO_AUTH @POST(“register”) Call register(@Body […]

Retrofit2将身体贴为Json

我正在更新Retrofit以使用Retrofit2 ,我已经设法做了很多事情GET,POST,PUT …… 但我有一个请求,我必须发送一个完整的JSON,我设法在Retrofit 1.9中做到这一点但在Retrofit2中没有支持它。 import retrofit.mime.TypedString; public class TypedJsonString extends TypedString { public TypedJsonString(String body) { super(body); } @Override public String mimeType() { return “application/json”; } } 如何改造2 ?