Как обрабатывать HTTP-ответ InputStream? - PullRequest
0 голосов
/ 08 июня 2019

Мой Android-мобильный Java-код отправляет запись транзакции в облако через Http. Я читаю Http Response и принимаю дальнейшие меры в соответствии с ответом. Работало нормально, но вдруг из-за этой строки приложение начало зависать и перестало работать:

responseInputStream = new BufferedInputStream (httpURLConnection.getInputStream ());

А позже вечером он снова начал работать. Итак, я думаю, что была какая-то проблема на сервере. Но я хочу убедиться, что если это произойдет снова, мое приложение не должно зависать. Я делаю вызов Http и читаю ответ в блоке try / catch и обрабатываю все исключения, я также включил исключение, чтобы ничего не пропустить. Но приложение все еще висело. Кто-нибудь может подсказать, как лучше реагировать на чтение?

Публикация всего кода функции.

Спасибо.

private void WebServiceConnection (String xmlString, String empid, String punchdate) {

    Log.e(TAG, "Inside webservice connection");
    InputStream responseInputStream = null;
    OutputStream requestOutputStream = null;

    HttpURLConnection httpURLConnection = null;

    try {

        //Server URL
        URL url = new URL("http://xyz:8084/RTTS/TransData");

        // Set the HTTP URL connection
        httpURLConnection = (HttpURLConnection)url.openConnection();

        Log.e(TAG, "http connection opened");

        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setDoInput(true);
        httpURLConnection.setDoOutput(true);
        httpURLConnection.setConnectTimeout(15000);
        httpURLConnection.setRequestProperty("Accept-Charset", "UTF-8");
        httpURLConnection.setRequestProperty("Content-Type", "text/xml");

        Log.e(TAG, "Send request");

        // Send request
        requestOutputStream = httpURLConnection.getOutputStream();
        requestOutputStream.write(xmlString.getBytes("UTF-8"));

        Log.e(TAG, "after send request");

    /*    String body = xmlString;
        OutputStream output = new BufferedOutputStream(httpURLConnection.getOutputStream());
        output.write(body.getBytes());
        output.flush();
    */

        //Receive response
        responseInputStream = new BufferedInputStream(httpURLConnection.getInputStream());

      //  responseInputStream = null;

        if(responseInputStream !=null) {
            Log.e("PushDataService", responseInputStream.toString());

            //Delete from Local
            PunchResponse punchResponse = new PunchResponse();

            ParseResponse parseResponse = new ParseResponse();

            punchResponse = parseResponse.getResponse(responseInputStream);

            Log.e("PushDataService", "Deleting record. Emp id: " + punchResponse.empid);

            if (punchResponse != null && punchResponse.empid != null) {
                Log.e("PushDataService", "Inside if response not null");
                deleteRecordLocal(punchResponse);
            } else {
                Log.e(TAG, "Null response from Web Service. REcord not found to delete");
            }

        }else {
            Log.e(TAG, "Null response returned from Web server");
        }
    }
    catch (UnknownHostException e) {
        e.printStackTrace();

    }
    catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch(SocketTimeoutException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    finally {

        if(httpURLConnection != null) {
            httpURLConnection.disconnect();
        }

        //close input
        if (responseInputStream != null) {
            try {
                responseInputStream.close();
            } catch (IOException ioex) {
                ioex.printStackTrace();
            }
        }
        //Close output
        if (requestOutputStream != null) {
            try {
                requestOutputStream.close();
            } catch (IOException ioex) {
                ioex.printStackTrace();
            }
        }
    }
}
...