我从服务器获得了第一个成功的响应,其中包含良好的状态代码和json数据结果。然后触发了4个连续的请求,并且他们将所有错误响应(状态代码400)都显示为错误请求即可。 当我按下刷新布局,试图从服务器获取数据列表时,会发生这种奇怪的行为。 这是我的代码: 请求:
public static void loadMyOrders(Context context, final OrdersCallBack listener) {
KService kTestService = ApiUtils.getOrdersApiService(context);
// TODO to be changed to getMyOrders <Done>
KService.getAllTheOrders().enqueue(new Callback<List<OrderServer>>() {
@Override
public void onResponse(Call<List<OrderServer>> call,
Response<List<OrderServer>> response) {
if (response.code() == 400) {
try {
Log.d("Error code 400",response.errorBody().string());
} catch (IOException e) {
e.printStackTrace();
Log.d("IO exception"," " + e.getMessage());
}
}
if (response.isSuccessful()) {
Log.d("listenerServerManager", response.code() + " ");
Log.d("slist0::" , " "+ response.body().toString());
List<OrderServer> ordersList = response.body();
for (OrderServer orderFromServer : ordersList) {
orderFromServer.compoundPrimaryKey();
}
Log.d("slist1::" , " "+ ordersList.toString());
listener.onSuccesful(ordersList);
} else {
Log.d("listenerServerManager", response.code() + " ");
listener.onError(response.code() + " ");
}
}
@Override
public void onFailure(Call<List<OrderServer>> call, Throwable t) {
Log.d("listenerServerManager", t.getMessage()+ " ");
listener.onError(t.getMessage() + " ");
}
});
}
改造客户:
public static Retrofit getClient(String baseUrl, Context context) {
sharedpreferences = context.getSharedPreferences(GlobalsManager.USERPREFERENCES, context.MODE_PRIVATE);
final String token = sharedpreferences.getString(GlobalsManager.TOKENKEY, " ");
Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
@Override public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}
@Override public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
if (httpClient == null) {
httpClient = new OkHttpClient.Builder().addNetworkInterceptor(new StethoInterceptor());
}
httpClient.addInterceptor(new Interceptor() {
@Override public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Authorization", "Bearer " + token)
.addHeader("Cache-Control", "no-cache")
.addHeader("Content-Type", "application/json")
.build();
return chain.proceed(request);
}
});
httpClient.addInterceptor(loggingInterceptor);
//httpClient.retryOnConnectionFailure(true);
return new Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build();
}
这是输出:第一个响应成功然后我获得4个成功响应,其中400作为代码响应。
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: <-- 200 OK http://api.serverapitest.kproj.net/api/TransportOrders/all (533ms)
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Server: nginx/1.10.3 (Ubuntu)
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Date: Fri, 08 Sep 2017 15:39:39 GMT
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Content-Type: application/json; charset=Windows-1252
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Content-Length: 32443
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Connection: keep-alive
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Cache-Control: no-cache
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Pragma: no-cache
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: Expires: -1
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: X-AspNet-Version: 4.0.30319
09-08 16:39:38.121 11246-13196/com.kProject.app6 D/OkHttp: X-Powered-By: ASP.NET
09-08 16:39:38.341 11246-13196/com.kProject.app6 D/OkHttp: [{THE GOOD LIST : THE EXPETED *******DATA *****************]}
09-08 16:39:38.351 11246-13196/com.kProject.app6 D/OkHttp: <-- END HTTP (32443-byte body)
<<<<<<After the refresh layout is pressed>>>>>>
09-08 16:40:45.151 11246-11246/com.kProject.app6 D/token-retrofitclient: FKJHGFHFGDKJHFDGFEZUOFbNR2Rt-AJu6mT_1Ci7QQAWYGiKH84M6lyAS*****DnpWWFdbo4nOGWfxTKVbA-RO2TzZjbZ5Sqn7_Da-UBm8mcc9x1JKQ6q8KWshd6
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: --> GET http://api.serverapitest.kproj.net/api/TransportOrders/all http/1.1
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Authorization: Bearer Liv27WIlooXjkjdQ7bNR2Rt-AJu6mT_1Ci7QQAWYGiKH84M6lyASB0RXMiq2WRAB8zx85N7IFSu1CyphJcXGMjArS876Tj_EjYoDkec4Uu6UubiOKid2wG6ta80t0y6ejlp0FECHmqm6llav7uj_W-Au11JLXCmlICOMXT8j8dzCnVBJtr7Uc5oUA6bLMAONOqyU_nKEwz2ZUtRAIIiImY_qzNvc49NSqm7RTqSvBzJha8ElIz515PRWhFfbOaGx-U7jn1-JE7vTSJXfPGCOCGU53ecvO13AFlX2ckG3bUDMUzkqcn534PprTYMgYggGGQf48qdu1SJMgkuyoHJ_81YfDmG8Kr_smrhc7tyoR3wdUQCX_zsVBMJ-zlAPDkNfk15DG4c0qWzmuW9pZZMR5AaAveKU6KUCyUrikFlDGGvwsMLL9P9iYRlZqHFw_3lDu7DnpWWFdbo4nOGWfxTKVbA-RO2TzZjbZ5Sqn7_Da-UBm8mcc9x1JKQ6q8KWshd6
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Cache-Control: no-cache
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: --> END GET
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: --> GET http://api.serverapitest.kproj.net/api/TransportOrders/all http/1.1
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Authorization: Bearer Liv27WIlooXjkjdQ7bNR2Rt-AJu6mT_1Ci7QQAWYGiKH84M6lyASB0RXMiq2WRAB8zx85N7IFSu1CyphJcXGMjArS876Tj_EjYoDkec4Uu6UubiOKid2wG6ta80t0y6ejlp0FECHmqm6llav7uj_W-Au11JLXCmlICOMXT8j8dzCnVBJtr7Uc5oUA6bLMAONOqyU_nKEwz2ZUtRAIIiImY_qzNvc49NSqm7RTqSvBzJha8ElIz515PRWhFfbOaGx-U7jn1-JE7vTSJXfPGCOCGU53ecvO13AFlX2ckG3bUDMUzkqcn534PprTYMgYggGGQf48qdu1SJMgkuyoHJ_81YfDmG8Kr_smrhc7tyoR3wdUQCX_zsVBMJ-zlAPDkNfk15DG4c0qWzmuW9pZZMR5AaAveKU6KUCyUrikFlDGGvwsMLL9P9iYRlZqHFw_3lDu7DnpWWFdbo4nOGWfxTKVbA-RO2TzZjbZ5Sqn7_Da-UBm8mcc9x1JKQ6q8KWshd6
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Cache-Control: no-cache
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Authorization: Bearer Liv27WIlooXjkjdQ7bNR2Rt-AJu6mT_1Ci7QQAWYGiKH84M6lyASB0RXMiq2WRAB8zx85N7IFSu1CyphJcXGMjArS876Tj_EjYoDkec4Uu6UubiOKid2wG6ta80t0y6ejlp0FECHmqm6llav7uj_W-Au11JLXCmlICOMXT8j8dzCnVBJtr7Uc5oUA6bLMAONOqyU_nKEwz2ZUtRAIIiImY_qzNvc49NSqm7RTqSvBzJha8ElIz515PRWhFfbOaGx-U7jn1-JE7vTSJXfPGCOCGU53ecvO13AFlX2ckG3bUDMUzkqcn534PprTYMgYggGGQf48qdu1SJMgkuyoHJ_81YfDmG8Kr_smrhc7tyoR3wdUQCX_zsVBMJ-zlAPDkNfk15DG4c0qWzmuW9pZZMR5AaAveKU6KUCyUrikFlDGGvwsMLL9P9iYRlZqHFw_3lDu7DnpWWFdbo4nOGWfxTKVbA-RO2TzZjbZ5Sqn7_Da-UBm8mcc9x1JKQ6q8KWshd6
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: Cache-Control: no-cache
09-08 16:40:45.161 11246-14427/com.kProject.app6 D/OkHttp: --> END GET
09-08 16:40:45.181 11246-11246/com.kProject.app6 D/ViewRootImpl: #1 mView = android.widget.LinearLayout{76d391e V.E...... ......I. 0,0-0,0}
09-08 16:40:45.201 11246-11373/com.kProject.app6 D/mali_winsys: new_window_surface returns 0x3000, [399x132]-format:1
09-08 16:40:45.261 11246-11373/com.kProject.app6
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <-- 400 Bad Request http://api.serverapitest.kproj.net/api/TransportOrders/all (222ms)
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Server: nginx/1.10.3 (Ubuntu)
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Date: Fri, 08 Sep 2017 15:40:46 GMT
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Content-Type: text/html
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Content-Length: 182
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Connection: close
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <html>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <head><title>400 Bad Request</title></head>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <body bgcolor="white">
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <center><h1>400 Bad Request</h1></center>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <hr><center>nginx/1.10.3 (Ubuntu)</center>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: </body>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: </html>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <-- END HTTP (182-byte body)
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <-- 400 Bad Request http://api.serverapitest.kproj.net/api/TransportOrders/all (224ms)
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Server: nginx/1.10.3 (Ubuntu)
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Date: Fri, 08 Sep 2017 15:40:46 GMT
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Content-Type: text/html
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Content-Length: 182
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: Connection: close
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <html>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <head><title>400 Bad Request</title></head>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <body bgcolor="white">
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <center><h1>400 Bad Request</h1></center>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <hr><center>nginx/1.10.3 (Ubuntu)</center>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: </body>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: </html>
09-08 16:40:45.391 11246-14427/com.kProject.app6 D/OkHttp: <-- END HTTP (182-byte body)
09-08 16:40:45.401 11246-11246/com.kProject.app6 D/Error code 400: <html> <head><title>400 Bad Request</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <hr><center>nginx/1.10.3 (Ubuntu)</center> </body> </html>
答案 0 :(得分:0)
就我而言,服务器无法处理这些请求。查看您的HTTP客户端是否是静态的,如果它然后从中删除静态,否则它将使您现有的请求也与新的请求一起,这将反过来使服务器无法同时处理所有这些请求。以下是我的设置,以备您需要时使用。
public WebServiceInterface getNetworkService(@Nullable final String token, @NonNull final String url) throws IOException {
this.token = token;
this.url = url;
return getRetrofit(url).create(WebServiceInterface.class);
}
private Retrofit getRetrofit(String url) {
OkHttpClient.Builder client =
new OkHttpClient.Builder().
addInterceptor(interceptor).
connectTimeout(90, TimeUnit.SECONDS).
writeTimeout(90, TimeUnit.SECONDS).
readTimeout(90, TimeUnit.SECONDS);
if (!Constant.RELEASE) {
client.addInterceptor(getLogger());
}
retrofit.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client.build());
return retrofit.build();
}