Strange serie of responses from the server after getting a first successful response

53 Views Asked by At

I'm getting a first successful response from the server with good status code and json data result.Then there are 4 successive requests are trigged and they gel all a bad response (status code 400) with a message Bad request. This strange behavior is happening when I press on a refresh layout,trying to get a list of data from the server. This is my code: The request:

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() + " ");

        }
    });
}

retrofit client:

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

This is the output: the first response is successful then I obtain the 4 succesvies responses with 400 as code response.

        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

There are 1 best solutions below

0
On

In my case, it was server unable to handle those requests. See if your HTTP client is static if it then removes static from it otherwise it will make your existing requests also along with new ones which will, in turn, make server unable to handle all these requests at the same time. Below is my setup in case you need.

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