简体   繁体   中英

How to read HttpResponse in Android?

I am trying to upload a audio file to my webserver. But don't know how to read the the response. Here is the very simplified test.php:

<?php 
  echo 'I want to see this in the Toast'; 
?>

fff And here is my onClick that must send the file to the webserver and get a response:

public void send(View v){
        Uri uri = new Uri.Builder().scheme("http").authority("sub.domain.nl").path("test.php")
                .appendQueryParameter("action", "sendMessage")
                .appendQueryParameter("idto", "18")
                .appendQueryParameter("idfrom", "36")
                .appendQueryParameter("type", "audio")
                .build();
        String urlString = uri.toString();
        new SendAudioTask().execute(urlString);
    }


    private class SendAudioTask extends AsyncTask<String, Integer, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            String url = params[0];
            File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),
                    "/audio.3gpp");

            HttpResponse response = null;

            try {
                HttpClient httpclient = new DefaultHttpClient();

                HttpPost httppost = new HttpPost(url);

                InputStreamEntity reqEntity = new InputStreamEntity(
                        new FileInputStream(file), -1);
                reqEntity.setContentType("binary/octet-stream");
                reqEntity.setChunked(true); 
                httppost.setEntity(reqEntity);
                response = httpclient.execute(httppost);
            } catch (Exception e) {
                publishProgress(1);
            }
            return response.toString();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            Toast.makeText(MainActivity.this, "Dev message: = " + values[0], Toast.LENGTH_SHORT).show();
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        }
    }

Result.toString() in the onPostExecute() is

org.apache.http.message.basicHttpRespons@43b4cc68

If toString() is the right way to read the response. What is wrong with my code? My code doesn't execute the publishProgress.

HttpEntity entity = httpResponse.getEntity();
InputStream is = entity.getContent();
String result = convertStreamToString(is);

private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append((line + "\n"));
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}

change

return response.toString();

to

return EntityUtils.toString(response.getEntity());

So what getEntity() does,

getEntity()

Obtains the message entity of this response, if any.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM