1

I am a beginner in android.I have built an application for login for leave module.For connecting it with mySql through PHP..I tried this code from a website.

package com.example.axdroid;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Axdroid extends Activity {
Button b;
EditText et,pass;
TextView tv;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
ProgressDialog dialog = null;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_axdroid);

    b = (Button)findViewById(R.id.Button01); 
    et = (EditText)findViewById(R.id.username);
    pass= (EditText)findViewById(R.id.password);
    tv = (TextView)findViewById(R.id.tv);

    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            dialog = ProgressDialog.show(Axdroid.this, "",
                   "Validating user...", true);
            Intent i=new Intent(getApplicationContext(),Userpage.class);
             startActivity(i);                
             new Thread(new Runnable() {
                    public void run() {
                        login();                         
                    }
                  }).start();         

        }
        });}
void login(){
    try{           

        httpclient=new DefaultHttpClient();
        httppost= new HttpPost("http://192.168.1.222/AndroidLeave/check.php");
        //add your data
        nameValuePairs = new ArrayList<NameValuePair>(2);
        // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar,
        nameValuePairs.add(new BasicNameValuePair("username",et.getText().toString().trim()));  // $Edittext_value = $_POST['Edittext_value'];
        nameValuePairs.add(new BasicNameValuePair("password",pass.getText().toString().trim()));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        //Execute HTTP Post Request
        response=httpclient.execute(httppost);
        // edited by James from coderzheaven.. from here....
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        final String response = httpclient.execute(httppost, responseHandler);
        System.out.println("Response : " + response);
        runOnUiThread(new Runnable() {
            public void run() {
                tv.setText("Response from PHP : " + response);
                dialog.dismiss();
            }
        });

        if(response.equalsIgnoreCase("User Found")){
            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(Axdroid.this,"Login Success", Toast.LENGTH_SHORT).show();
                }
            });

            startActivity(new Intent(getApplicationContext(), Userpage.class));
        }else{
            showAlert();               
        }

    }catch(Exception e){
        dialog.dismiss();
        System.out.println("Exception : " + e.getMessage());
    }
}
public void showAlert(){
    Axdroid.this.runOnUiThread(new Runnable() {
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(Axdroid.this);
            builder.setTitle("Login Error.");
            builder.setMessage("User not Found.") 
                   .setCancelable(false)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                       }
                   });                    
            AlertDialog alert = builder.create();
            alert.show();              
        }
    });
}

}

I am unable to make this work as while debugging the code...the control jumps from httpclient to catch code.Would appreciate any help in sorting this.

This is the PHP file.I have checked it seperately and it is working.

<?php
$hostname_localhost ="localhost";
$database_localhost ="mydatabase";
$username_localhost ="root";
$password_localhost ="";
$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)
or
trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db($database_localhost, $localhost);


$username = $_POST['username'];
$password = $_POST['password'];


$query_search = "select * from tbl_user where username = '".$username."' AND password = '".$password. "'";
$query_exec = mysql_query($query_search) or die(mysql_error());
$rows = mysql_num_rows($query_exec);
//echo $rows;
if($rows == 0) {
echo "No Such User Found";
}
else  {
echo "User Found";
}
?>

@ashwani This is the present Axdroid.java page(main activity page)

public class Axdroid extends Activity {
Button b;
EditText et,pass;
TextView tv;
HttpPost httppost;
StringBuffer buffer;
HttpResponse response;
HttpClient httpclient;
List<NameValuePair> nameValuePairs;
ProgressDialog dialog = null;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_axdroid);

    b = (Button)findViewById(R.id.Button01); 
    et = (EditText)findViewById(R.id.username);
    pass= (EditText)findViewById(R.id.password);
    tv = (TextView)findViewById(R.id.tv);

    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            String url="http://192.168.1.222/AndroidLeave/check.php";
            JSONParser jparser= new JSONParser();
            ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("tag", "getcategory"));
            params.add(new BasicNameValuePair("username", et.getText().toString()));
            params.add(new BasicNameValuePair("password", pass.getText().toString()));
            JSONObject jObj= jparser.makeHttpRequest(url, "POST", params);try {
                String success = jObj.get("success").toString();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }               


        }
        });}'
6
  • Please put your php file also .So, its better to find error Commented Oct 18, 2012 at 5:40
  • this is the PHP file..I have checked it seperately and its working. Commented Oct 18, 2012 at 5:43
  • Whether is it print on console or not ? System.out.println("Response : " + response); and print then which string print ? Commented Oct 18, 2012 at 5:46
  • I have added the PHP file.Kindly have a look at it.the response should be either "user not found" or "user found". Commented Oct 18, 2012 at 5:50
  • please post the message you get when exception is generated. The "e.getMessage()" part Commented Oct 18, 2012 at 6:28

2 Answers 2

2

for parsing the data I use the following class

JsonParser.java

public class JSONParser {

    InputStream is = null;
    JSONObject jObj = null;
    String json = "";

    public JSONParser() {
    }

    // function get json from url
    // by making HTTP POST or GET method
    public JSONObject makeHttpRequest(String url, String method,
            List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
            if (method == "POST") {
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            } else if (method == "GET") {
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                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, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder("");

            Log.d("reader value in json parser", reader.toString());
            String line = "";
            while ((line = reader.readLine()) != null) {
                Log.d("line in JsonParser", line);
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
            Log.d("Json value", json);

        } catch (Exception e) {
            Log.d("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {

            jObj = new JSONObject(json);
            json = "";
        } catch (JSONException e) {
            Log.d("JSON Parser", "Error parsing data " + e.toString());
        }
        return jObj;
    }
}

now in your activity try to pass a url like this

String url="place your url here";
JSONParser jparser= new JSONParser();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", "getcategory"));
params.add(new BasicNameValuePair("username", username.getText().toString()));
params.add(new BasicNameValuePair("password", password.getText().toString()));
JSONObject jobj= jparser.makeHttpRequest(url, "POST", params); 

//now here retrieve the data from json as:

String success= jobj.get("success");

Hope this helps!

also in your php file you have to use the json_encode function before echo !

Sign up to request clarification or add additional context in comments.

12 Comments

Thank you @Ashwani...I had few questions, am sorry for the ignorance as am new to this.1)the JsonParser class should be added in src file seperately in the android file right? 2) And the class defined is called in the activity.java page? I will try your solution and come back.Thank you
Ans 1). yes make a separate class named JSONParser in src folder . Ans 2) Call the makeHttpRequest function in the axdroid.java as it is in your question
in this jobj.get("pass the tag as same as from php");
in php try like this $response["success"] = 0; if($rows == 0) { echo json_encode($response); } else { $response["success"] = 1; echo json_encode($response); }
As your instruction, I havce made changes in php file also but I m getting the error as 'Type mismatch: cannot convert from Object to String' for the instruction ' String success = jObj.get("success");'
|
0

Use this function . Changes according to your requirement.

void login()
        {
            String data = null;
            InputStream is = null;
            StringBuilder sb;
            String result;

            try
            {
                HttpClient httpsClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost("http://192.168.1.4/check.php");
                List<NameValuePair> nameValue = new ArrayList<NameValuePair>();

                nameValue.add(new BasicNameValuePair("username", "" + et.getText().toString()));
                nameValue.add(new BasicNameValuePair("password", "" + pass.getText().toString()));


                httpPost.setEntity(new UrlEncodedFormEntity(nameValue));


                HttpResponse httpRes = httpsClient.execute(httpPost);


                HttpResponse httpResponce = httpsClient.execute(httpPost);
                HttpEntity httpEntity = httpResponce.getEntity();
                is = httpEntity.getContent();

            }
            catch(Exception e) {}


             try
                {
                    BufferedReader BufR = new BufferedReader(new InputStreamReader(is, "iso-8859-1"),8);
                    sb = new StringBuilder();
                    sb.append(BufR.readLine() + "\n");
                    String line = "0";

                    while((line = BufR.readLine()) != null)
                    {
                        sb.append(line + "\n");
                    }


                    result = sb.toString();

                    Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
                    if(result.equals("User Found"))
                    {
                        Toast.makeText(getApplicationContext(), "User Found ", Toast.LENGTH_LONG).show();
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "User Not Found ", Toast.LENGTH_LONG).show();
                    }
                }
                catch (Exception e) {
                    Log.e("log_tag", "Error in convert String" + e.toString());
                }





        }

10 Comments

.I tried this code...The control jumped from "is" to "Log.e" and i am gettin an error.
do you change path and give internet permission .
Thankyou for the response..I downloaded the code and run it.Dint understand Nothing is happening.If you could kindly elaborate.
When i click on the button it should show a response right?It is not showing.
change database path , import database then check . It 110 % work !!
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.