Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert an inputstream to a string value in Java Android App

Tags:

java

android

I'm having trouble with function(s) I'm writing. I'm trying to convert an inputstream to a string value. I've written two functions and I'm attempting to extract the String value but my Log.e response is returning NULL. Below is my syntax. What am I doing wrong? Thanks

public JSONArray GetCityDetails(String StateID) {

    @SuppressWarnings("deprecation")
    String url = "http://mywebsite.com/getCity.php?StateID="+URLEncoder.encode(StateID);

    HttpEntity httpEntity = null;

    try{

         DefaultHttpClient httpClient = new DefaultHttpClient();
         HttpGet httpGet = new HttpGet(url);

         HttpResponse httpResponse = httpClient.execute(httpGet);

         httpEntity = httpResponse.getEntity();


    } catch(ClientProtocolException e){
        e.printStackTrace();

    } catch(IOException e){
        e.printStackTrace();
    }


    JSONArray jsonArray = null;
    if(httpEntity !=null){
        try{

            InputStream entityResponse = httpEntity.getContent();
            // not working
            String entityResponseAfterFunctionCall2 = readFully(entityResponse);
            // not working
            String entityResponseAfterFunctionCall3 = letsDoThisAgain(entityResponse);
            Log.e("Entity Response Dude: ", entityResponseAfterFunctionCall3);

            jsonArray = new JSONArray(entityResponseAfterFunctionCall3);

        } catch(JSONException e){
            e.printStackTrace();
        } catch(IOException e){
            e.printStackTrace();
        }
    }

    return jsonArray;
}

public String readFully(InputStream entityResponse) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length = 0;
    while ((length = entityResponse.read(buffer)) != -1) {
        baos.write(buffer, 0, length);
    }
    return baos.toString();
}

public String letsDoThisAgain(InputStream entityResponse){

    InputStreamReader is = new InputStreamReader(entityResponse);
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(is);
    try {
        String read = br.readLine();

        while(read !=null){
            sb.append(read);
            read = br.readLine();
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

    return sb.toString();   
}

}
like image 965
bobhope Avatar asked Sep 22 '14 21:09

bobhope


2 Answers

if(inputStream != null)
        {
            BufferedReader br = null;
            StringBuilder sb = new StringBuilder();

            String line;
            try {

                br = new BufferedReader(new InputStreamReader(inputStream));
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            return sb.toString();
        }
        else
        {
            return "";
        }
like image 126
user3109745 Avatar answered Sep 30 '22 11:09

user3109745


Your readFully call will use your system's default character encoding to transform byte buffer into String. This is NOT what you want to happen.

You should use explicit character set in toString call. The encoding is usually specified in the HTTP request header.

Here is an example of how to convert a UTF-8 encoded string

return baos.toString( "UTF-8" );

Your second problem, is once you've consumed the InputString in readFully call, the letsDoThisAgain will not have anything to read, because the InputStream will be at the EOF.

like image 44
Alexander Pogrebnyak Avatar answered Sep 30 '22 10:09

Alexander Pogrebnyak