Vrinda Bhatia
Vrinda Bhatia

Reputation: 33

How to get a String from Android HTTP post request?

I am sending HTTP post request to a web server for login.It returns string value true or false. AsyncTask code :

    class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{
    HttpResponse httpResponse;
    @Override
    protected String doInBackground(String... params) {

        String paramUsername = params[0];
        String paramPassword = params[1];


        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("myurl");

        try {


        BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("user", paramUsername);
        BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("password", paramPassword);


        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(usernameBasicNameValuePair);
        nameValuePairList.add(passwordBasicNameValuePAir);


            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);

            httpPost.setEntity(urlEncodedFormEntity);
            httpResponse = httpClient.execute(httpPost);


            } catch (ClientProtocolException cpe) {
                System.out.println("First Exception caz of HttpResponese :" + cpe);

            } catch (IOException ioe) {
                System.out.println("Second Exception caz of HttpResponse :" + ioe);

            }




        return httpResponse.toString();
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        String s="true";
        if(result.equalsIgnoreCase(s)){
            Toast.makeText(getApplicationContext(), "Congrats! Login Successful...", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(SignIn.this, Dashboard.class);
            startActivity(intent);


        }else{
            Toast.makeText(getApplicationContext(), "Invalid Username or Password...", Toast.LENGTH_LONG).show();
        }
    }
}

OnCreate code:

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_in);
    editTextUserName = (EditText) findViewById(R.id.editTextUserNameToLogin);
    editTextPassword = (EditText) findViewById(R.id.editTextPasswordToLogin);

    Button btnSignIn = (Button) findViewById(R.id.buttonSignIn);
    // btnSignIn.setOnClickListener(this);
    btnSignIn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //if (v.getId() == R.id.buttonSignIn) {
                String givenUsername = editTextUserName.getEditableText().toString();
                String givenPassword = editTextPassword.getEditableText().toString();

           //     System.out.println("Given username :" + givenUsername + " Given password :" + givenPassword);
            new SendPostReqAsyncTask().execute(givenUsername, givenPassword); } }); }

Changing the return value of doInBackground to httpResponse.toString() also causes the app to crash. I am new to Android, and can't seem to figure out the problem even after much searching. Any help is appreciated.

Edit: The httpResponse can be converted to string by doing the following :

String response = EntityUtils.toString(httpResponse.getEntity());

Upvotes: 0

Views: 1384

Answers (4)

srikanth kumar
srikanth kumar

Reputation: 39

First check whether you are getting response or not using Log.d as below:

httpPost.setEntity(urlEncodedFormEntity);
httpResponse = httpClient.execute(httpPost);
String response = EntityUtils.toString(httpResponse.getEntity());
Log.d("Response","Response from http:"+response);

Check in Logcat what it is showing in place of response. If it is displaying nothing then there are two possibilities. One is server side response is not sending correctly. Second is may be network problem or url not correct. Please check that and let me know. Also show the logcat output if possible.

Upvotes: 0

Yugesh
Yugesh

Reputation: 4092

First Covert your HTTPResponse to String.

class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{

    HttpResponse httpResponse;
    String result 

    @Override
    protected String doInBackground(String... params) {

        String paramUsername = params[0];
        String paramPassword = params[1];

     try {

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost("Your URL");
        BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("user", paramUsername);
        BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("password", paramPassword);

        List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
        nameValuePairList.add(usernameBasicNameValuePair);
        nameValuePairList.add(passwordBasicNameValuePAir);

        UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList);

        httpPost.setEntity(urlEncodedFormEntity);
        httpResponse = httpClient.execute(httpPost);

        //From here to Convert from HTTPResponse to String
        result= EntityUtils.toString(httpResponse.getEntity());

        } catch (ClientProtocolException cpe) {
            System.out.println("First Exception caz of HttpResponese :" + cpe);

        } catch (IOException ioe) {
            System.out.println("Second Exception caz of HttpResponse :" + ioe);

        }
 return result;
}

Upvotes: 3

Anand Savjani
Anand Savjani

Reputation: 2535

Use this to request

public String request(String url, List<NameValuePair> nameValuePairs) {
    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        // httpPost.setHeader("encytype", "multipart/form-data");

        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8);
        httpPost.setEntity(entity);

        HttpResponse httpResponse = httpClient.execute(httpPost);

        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

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

    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        reader.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("log_tag", "Buffer Error" + "Error converting result " + e.toString());
    }

    return json;
}

Upvotes: 0

Jaiprakash Soni
Jaiprakash Soni

Reputation: 4112

You are not reading response from server and returning null from doInBackground() to onPostExecute(). You need to read input stream from httpresponse like this:

String result = "";
HttpResponse httpResponse = httpclient.execute(httpPost);
InputStream inputStream = httpResponse.getEntity().getContent();
if (inputStream != null) {
     BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(inputStream));
     String line = "";
     while ((line = bufferedReader.readLine()) != null)
          result += line;
     inputStream.close();
     bufferedReader.close();
}

now you can return result from doInbackground()

Upvotes: 0

Related Questions