我使用的是最新版本的改造,改造2,v2.0.0-beta3。API响应是User对象或空响应(空值)。如果我发送正确的用户名/密码,那么句柄将进入带有成功用户对象的响应方法。但是如果发送错误的密码,那么API将不返回任何内容,响应头中的值很少。但是我在onFailure(可抛出)中得到了MalformedJsonExc0019。
“com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)在第1行第1列路径$处接受格式错误的JSON”
我认为应该有某种方法来处理空响应,并使用ResponseInceptor或自定义回调读取响应头。但我不知道怎么用这个。
这是密码,
// Define the interceptor, add authentication headers
Interceptor interceptor = new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request newRequest = chain.request().newBuilder().addHeader("Authorization", new ITAuthorizationUtil().getAuthorization(user.getMobile_no(), user.getPassword())).build();
return chain.proceed(newRequest);
}
};
// Add the interceptor to OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
ITAPIEndpointsInterface apiEndpointsInterface = retrofit.create(ITAPIEndpointsInterface.class);
///
Call<User> call = apiEndpointsInterface.userLogin(senderId, applicationId, registrationId);
//asynchronous call
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response) {
ApiResponse apiResponse = ITAPIStatusInfo.getApiErrorObject_Retrofit(response.headers());
onSuccess( response.body(),apiResponse);
}
@Override
public void onFailure(Throwable t) {
Log.d(">>> ",t.getMessage());
}
});
你加了“com”吗。收拾一下。改装2:转换器gson:2.0.0-beta3'到渐变依赖性?
然后你可以创建这样一个改造实例:
private static MyClient MyClient;
public static String baseUrl = "http://mybaseurl.com" ;
public static MyClient getClient() {
if (MyClient == null) {
OkHttpClient httpClient = new OkHttpClient();
Retrofit client = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
//.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
MyClient = client.create(MyClient.class);
}
return MyClient;
}
对于头,另一种添加方式,比如您正在添加的“授权”头,它只是在apiendpoint接口中添加一个名为@header的注释,用于api调用,需要一个头
示例:
@POST("/login/")
Call<Farm> login(@Header("Authorization") String token, @Body User user);
您需要提供一个GSON实例来进行改造。
尝试:
Gson gson = new GsonBuilder().create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build();
当没有数据avilable时,它返回以下JSON: http://www.omdbapi.com/?t=asdasdas
最近我开始使用reverfit2,我遇到了一个解析空响应体的问题。我有一个服务器,它只响应http代码,没有任何内容在响应体。 我如何只处理关于服务器响应的元信息(报头、状态代码等)?
以下是GSON的例外: 改型实例是使用GsonConverterFactory创建的
我使用改造2.7.1与静态编程语言协程。 我的改装服务定义如下: 此调用返回HTTP 204无内容响应,这会导致改装时崩溃: 如何使用协程处理改造中的204响应而不崩溃?
我正在使用改型,我想访问从服务器返回的JSON响应。有人能给我提个建议吗?谢谢
这是我在改装2.0中获得回应的逻辑 现在他们对API进行了更改,数据如下: 如何处理ONResponse中的对象并解析数组中的钱包信息?