HttpURLConnection периодически возвращает код ошибки 500 - PullRequest
0 голосов
/ 27 апреля 2020

Следующая задача URLConnection Post хорошо работает в Android 8, но периодически работает в Android 9. Например, при первых двух вызовах возвращается код ошибки 500, затем при третьем вызове возвращается правильный код 200 с параметром токена из внутреннего ответа. В других случаях он работает с первой попытки, сразу после компиляции и перезапуска моего приложения в эмуляторе Android 9, хорошо работает во время еще нескольких звонков и затем начинает возвращать ошибочную ошибку Code 500. Вы чувствуете, что надежность близка 50/50 случайно. Я не думаю, что это эмулятор, потому что коллега проверил Apk на физическом устройстве Android 9 P ie, и такое же поведение происходит. Я также считаю, что моя строка входных параметров правильная, потому что аутентификация работает по крайней мере несколько раз, поэтому ошибка должна быть в какой-то реализации моего кода.

Есть идеи?

Вот код:

LoginPIEAsync lp = new LoginPIEAsync(context, params, targetURL, jParams); //L391
lp.execute();



public static class LoginPIEAsync extends AsyncTask<String, Void, String> {

        Context context;
        String dataString;
        byte[] bodyData;
        URL url = null;    
        String user, pwd, details, packagename;

        @RequiresApi(api = Build.VERSION_CODES.KITKAT) //Constructor
        public LoginPIEAsync(Context ctx, String params, URL url, JSONObject j) throws UnsupportedEncodingException {
            this.context = ctx;
            this.bodyData = params.getBytes(HTTP.UTF_8);
            this.dataString = params;
            this.url = url;
            loge("ASYNC URL: " + this.url.toString());
        }

        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected String doInBackground(String... params) {
            String response;
            InputStream stream = null;
            HttpURLConnection urlConnection = null;
            try {
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Accept-Charset", "UTF-8;q=1;ISO-8859-1");
                urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                urlConnection.setRequestProperty("charset", "utf-8");
                urlConnection.setRequestProperty("Connection", "Keep-Alive");
                urlConnection.setRequestProperty("Content-Length", Integer.toString(this.bodyData.length));
                urlConnection.setRequestProperty("Accept-Encoding", HTTP.UTF_8);
                //urlConnection.setUseCaches (false);
                urlConnection.setConnectTimeout(19000);
                urlConnection.setReadTimeout(19000);
                //urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);

                String baseAuthStr = ANDROID_CONSUMER_KEY + ":" + ANDROID_CONSUMER_SECRET;
                urlConnection.addRequestProperty("Authorization", "Basic " + baseAuthStr);

                OutputStream out = urlConnection.getOutputStream();
                out.write(bodyData);
                out.flush ();
                out.close();
                urlConnection.connect();

                InputStream inputStream;
                int status = urlConnection.getResponseCode();

                if (status != HttpURLConnection.HTTP_OK)  {
                    inputStream = urlConnection.getErrorStream();
                }
                else  {
                    inputStream = urlConnection.getInputStream();
                }

                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String result = "";
                String inputLine;

                while ((inputLine = reader.readLine()) != null) {
                    loge("inputSTREAM: " + inputLine);
                    result+=inputLine;
                }
                reader.close();

                loge("PIE CONNECTION, getResponseCode: "+String.valueOf(status));
                loge("PIE CONNECTION, result: "+result);
                return result;
            } catch (IOException e) {
                loge("IOException: "+e.toString());
                e.printStackTrace();
            } finally {
                if (urlConnection != null) {
                    loge("DISCONNECTING.....");
                    urlConnection.disconnect();
                }
            }

            try {
                Thread.sleep(25000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                loge("Result, SLEEP ERROR");
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            if(result==null){
                Toast toast = Toast.makeText(context, "Token Failed", Toast.LENGTH_LONG);
                toast.show();
            }
            else{
                Toast toast = Toast.makeText(context, "Token: "+result, Toast.LENGTH_LONG);
                toast.show();
            }
            loge("ASYNC onPostExecute: "+result);
        }
}
...