1

This is my code for Android:

 public void SendDataToServer(final String name, final String email, final String password){
        class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {

                String QuickName = name ;
                String QuickEmail = email ;
                String QuickPassword = password;


                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                nameValuePairs.add(new BasicNameValuePair("nome", QuickName));
                nameValuePairs.add(new BasicNameValuePair("email", QuickEmail));
                nameValuePairs.add(new BasicNameValuePair("password", QuickPassword));


                try {
                    HttpClient httpClient = new DefaultHttpClient();

                    HttpPost httpPost = new HttpPost(Configs.signup);

                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                    HttpResponse response = httpClient.execute(httpPost);

                    HttpEntity entity = response.getEntity();


                } catch (ClientProtocolException e) {

                } catch (IOException e) {

                }
                return "Data Submit Successfully";
            }

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


                Log.d(result, "Value");


                try {

                    JSONObject jo = new JSONObject(result);
                    String status = jo.optString("status");


                        if (status.equals("0")) {
                            Toast.makeText(Signup.this, "Username already exists", Toast.LENGTH_LONG).show();

                        } else if (status.equals("1")) {
                            Intent intent = new Intent(Signup.this, Login.class);
                            startActivity(intent);

                            Toast.makeText(Signup.this, "Registered successfully", Toast.LENGTH_LONG).show();
                            Toast.makeText(Signup.this, "Verify your email adress in email received", Toast.LENGTH_SHORT).show();
                            finish();
                        } else if (status.equals("2")) {
                            Toast.makeText(Signup.this, "Failed to Signup", Toast.LENGTH_LONG).show();
                        }
                        //}

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

            }
        }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(name, email, password);
    }

This is the error:

07-21 12:55:35.297 24973-24973/com.futegolo.igomessenger W/System.err: org.json.JSONException: Value Data of type java.lang.String cannot be converted to JSONObject

This is my json response

{"status":0}

3 Answers3

1

This is because you are not returning the actual response from service in doInBackground() method. You are returning as

 return "Data Submit Successfully"

And when you convert that string in onPostExecute() method obviously that is not valid JsonObject

Replace your code after this "HttpEntity entity = response.getEntity();"

HttpEntity entity = response.getEntity();
String result = null;
    if (entity != null) {

        // A Simple JSON Response Read
        InputStream instream = entity.getContent();
        result= convertStreamToString(instream);
        // now you have the string representation of the HTML request
        instream.close();
    }

    private static String convertStreamToString(InputStream is) {
/*
 * To convert the InputStream to String we use the BufferedReader.readLine()
 * method. We iterate until the BufferedReader return null which means
 * there's no more data to read. Each line will appended to a StringBuilder
 * and returned as String.
 */
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();

}

And rather returning your hard coded string return result. Hope that helps. for further reference you can follow below links

https://stackoverflow.com/questions/4457492/how-do-i-use-the-simple-http-client-in-android
Abdul Waheed
  • 4,540
  • 6
  • 35
  • 58
0

Use the code as following:

   public void SendDataToServer(final String name, final String email, final String password){
            class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
                @Override
                protected String doInBackground(String... params) {

                    String QuickName = name ;
                    String QuickEmail = email ;
                    String QuickPassword = password;


                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                    nameValuePairs.add(new BasicNameValuePair("nome", QuickName));
                    nameValuePairs.add(new BasicNameValuePair("email", QuickEmail));
                    nameValuePairs.add(new BasicNameValuePair("password", QuickPassword));


                    try {
                        HttpClient httpClient = new DefaultHttpClient();

                        HttpPost httpPost = new HttpPost(Configs.signup);

                        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        HttpResponse response = httpClient.execute(httpPost);

                        HttpEntity entity = response.getEntity();
    StringBuffer result= new StringBuffer();
     BufferedReader in = new BufferedReader(
                        new InputStreamReader(entity.getContent()));
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    result.append(inputLine);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result.toString();
                }

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


                    Log.d(result, "Value");


                    try {

                        JSONObject jo = new JSONObject(result);
                        String status = jo.optString("status");


                            if (status.equals("0")) {
                                Toast.makeText(Signup.this, "Username already exists", Toast.LENGTH_LONG).show();

                            } else if (status.equals("1")) {
                                Intent intent = new Intent(Signup.this, Login.class);
                                startActivity(intent);

                                Toast.makeText(Signup.this, "Registered successfully", Toast.LENGTH_LONG).show();
                                Toast.makeText(Signup.this, "Verify your email adress in email received", Toast.LENGTH_SHORT).show();
                                finish();
                            } else if (status.equals("2")) {
                                Toast.makeText(Signup.this, "Failed to Signup", Toast.LENGTH_LONG).show();
                            }
                            //}

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

                }
            }
            SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
            sendPostReqAsyncTask.execute(name, email, password);
        }
Usman Rana
  • 2,067
  • 1
  • 21
  • 32
0

Appache has already provided a Util class for that called EntityUtils.

Replace return "Data Submit Successfully" with this code

String responseText = EntityUtils.toString(httpResponse.getEntity());
EntityUtils.consume(httpResponse.getEntity());

return responseText;
Yessine Mahdouani
  • 1,225
  • 12
  • 24