0

How to read the php echo into string in Android?

I want to get the echo response with success or failure.

If user login into the page, if the user name doesn't match in database it should not allow the user to login and show some failure message.

MainActivity class

public class MainActivity extends Activity implements OnClickListener {

    EditText name,number;
    Button login; 
    SetContact contact;

    Boolean isInternetPresent = false;
    ConnectionDetector cd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contact);

        cd = new ConnectionDetector(getApplicationContext());


        name = (EditText) findViewById(R.id.etname);
        number = (EditText) findViewById(R.id.etnumber);

        login = (Button) findViewById(R.id.login);
        login.setOnClickListener(this);
    }

    public static String POST(String url, SetContact contact){
        InputStream inputStream = null;
        String result = "";
        try {


            HttpClient httpclient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(url);

            String json = "";

            JSONObject jsonObject = new JSONObject();
            jsonObject.accumulate("name", contact.getName());
            jsonObject.accumulate("number", contact.getNumber());



            json = jsonObject.toString();

            StringEntity se = new StringEntity(json);

            httpPost.setEntity(se);

            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");

            HttpResponse httpResponse = httpclient.execute(httpPost);

            inputStream = httpResponse.getEntity().getContent();

            if(inputStream != null)
                result = convertInputStreamToString(inputStream);
            else
                result = "Did not work!";

        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }

        return result;
    }

    public void onClick(View view) {

        String username = name.getText().toString();
        String password = number.getText().toString();
       /* if(username.equals("name") && password.equals("number")){


                Toast.makeText(getBaseContext(), "Username and password incorrect", Toast.LENGTH_LONG).show();
            } */     

    /*else {

            Toast.makeText(getBaseContext(), "Username does not exist. Please register.", Toast.LENGTH_LONG).show();
        }           */




        switch(view.getId()){
            case R.id.login:
                if(!validate()) {
                    Toast.makeText(getBaseContext(), "Please Enter Valid data!", Toast.LENGTH_LONG).show();
                } else {

                new HttpAsyncTask().execute("myurl?name="+username+"&number="+password);
                }
            break;
        }

    }
    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            contact = new SetContact();
            contact.setName(name.getText().toString());
            contact.setNumber(number.getText().toString());


            return POST(urls[0],contact);
        }


        protected void onPostExecute(String result) {

            isInternetPresent = cd.isConnectingToInternet();

            if (isInternetPresent) {
                Toast.makeText(getBaseContext(), "Thanks for the Mail, We will Reply you soon", Toast.LENGTH_LONG).show();
                name.setText("");
                number.setText("");

                Intent in = new Intent(getApplicationContext(), Updates.class);
                startActivity(in);
            } else {

                showAlertDialog(MainActivity.this, "No Internet Connection",    "Please Connect Internet.", false);
            }                   
       }
    }


    private boolean validate(){




            if(name.length() > 25){
            Toast.makeText(getApplicationContext(), "pls enter less the 25 characher in user name", Toast.LENGTH_SHORT).show();


            return true;
        }

        else if(name.length() == 0 || number.length() == 0 ){
            Toast.makeText(getApplicationContext(), "pls fill the empty fields", Toast.LENGTH_SHORT).show();
            return false;
        }

        else if(number.length() < 6 || number.length() > 13){

            number.setError("Not Valid Phone Number");
            return false;

        }
            return true;



    }
    private static String convertInputStreamToString(InputStream inputStream) throws IOException{
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }

    @SuppressWarnings("deprecation")
    public void showAlertDialog(Context context, String title, String message, Boolean status) {
        AlertDialog alertDialog = new AlertDialog.Builder(context).create();


        alertDialog.setTitle(title);

        alertDialog.setMessage(message);

        alertDialog.setIcon((status) ? R.drawable.fail : R.drawable.fail);

        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        alertDialog.show();
    }

}
user3313444
  • 19
  • 1
  • 7
  • Your question is very general, please explain, how you carry out the http request and how you use/run the php site. – alex Jul 02 '14 at 10:47

3 Answers3

0

Try this

HttpResponse response = client.execute(httpPost);

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

hint: Am using Print in php instead of echo

APriya
  • 1,994
  • 1
  • 16
  • 21
  • have you tried with print? its working fine for me and am passing json value in print – APriya Jul 02 '14 at 10:43
  • I replaced with print and checked but it's showing thanks message and it's display welcome.even though for invalid user also it's logging in – user3313444 Jul 02 '14 at 11:13
0

Your question is very general, so my answer will be, too. You can generate output in PHP e.g. via echo like "login failed" and evaluate it on the Android side. Even better, you can use HTTP status codes to imply success or failure (like Unauthorized / 401) after login (PHP side / Android side).

Since you have no code, that actually does the login via a GET request, you should read on how to do this.

Community
  • 1
  • 1
alex
  • 5,516
  • 2
  • 36
  • 60
  • I can guide you to write that code but i want do your complete work. So please just post a draft of the code e.g. based on the links in my post and we can work it out together... The last link in my post almost solves your problem on the Android side – alex Jul 02 '14 at 14:04
0

You should use JSON and not strings.

I use JsonSimple library to parse it to object.

Here is my code to have an example:

HashMap<String, String> urlParams = new HashMap<String, String>();
    urlParams.put("KEY", Value);
    String result = "-1";
    try {
        result = rest.POST(host, "Response.php", this.header,
                urlParams, 3000);
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    JSONObject json = new JSONObject();
    try {
        json = (JSONObject) new JSONParser().parse(result);
        return json.get("value_you_want").toString();
    } catch (ParseException e) {
        return ("Error parsing " + e.getMessage());

    }
Nacho
  • 2,057
  • 2
  • 23
  • 32