第一次成功回复后,来自服务器的响应奇怪

时间:2017-09-08 16:30:13

标签: android retrofit2 okhttp3 bad-request

我从服务器获得了第一个成功的响应,其中包含良好的状态代码和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>

1 个答案:

答案 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();
    }