5

I m trying to do a registration page from an android activity connectiong the datas to my sqldatabase, I m getting this error " org.json.JSONException: Value

First of all, could anyone advise me on how to debug my program when using an mysql database with php script for an android application ? Cause I usually use the log cat but here the errors aren't as clear :S ...

Here is the activity code :

public class Subscribe extends Activity {

    Button bSubscribe;
    EditText etPwdSub, etPwdConf, etLoginSub, etNameSub, etFnSub;
    String result = null;
    InputStream is = null;
    String donnees = "";

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.subscribe);

        etLoginSub = (EditText) findViewById(R.id.etLoginSub);
        etPwdSub = (EditText) findViewById(R.id.etPwdSub);
        etPwdConf = (EditText) findViewById(R.id.etPwdConf);
        etNameSub = (EditText) findViewById(R.id.etNameSub);
        etFnSub = (EditText) findViewById(R.id.etFnSub);

        bSubscribe = (Button) findViewById(R.id.bSubscribe);        
        bSubscribe.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Pattern p = Pattern.compile(".+@.+\\.[a-z]+");
                Matcher m = p.matcher(etLoginSub.getEditableText());

                if (m.matches() == false) {

                    Toast.makeText(
                            getBaseContext(),
                            "Le champs email ne correspond pas au format d'une adresse mail",
                            Toast.LENGTH_SHORT).show();
                } else {

                    // autre méthode : etPwdSub.equals("")
                    if (etPwdSub.getEditableText() != null
                            && etPwdConf.getEditableText() != null
                            && etNameSub.getEditableText() != null
                            && etFnSub.getEditableText() != null) {

                        if (etPwdSub.getEditableText().toString().equals(etPwdConf.getEditableText().toString())) {

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

                            nameValuePairs.add(new BasicNameValuePair("login", etLoginSub.getText().toString()));
                            nameValuePairs.add(new BasicNameValuePair("pwd", etPwdConf.getText().toString()));
                            nameValuePairs.add(new BasicNameValuePair("name", etNameSub.getText().toString()));
                            nameValuePairs.add(new BasicNameValuePair("firstname", etFnSub.getText().toString()));                          

                            try {
                                // commandes httpClient
                                HttpClient httpclient = new DefaultHttpClient();


                                HttpPost httppost = new HttpPost(
                                        "http://192.168.1.101/spotnshare/subscribe.php");

                                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                                HttpResponse response = httpclient.execute(httppost);

                                HttpEntity entity = response.getEntity();
                                is = entity.getContent();

                            } catch (Exception e) {
                                Log.i("taghttppost", "" + e.toString());
                                Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
                                        .show();
                            }

                            try {
                                BufferedReader reader = new BufferedReader(new InputStreamReader(
                                        is, "UTF-8"));

                                StringBuilder sb = new StringBuilder();

                                String line = null;

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

                                is.close();

                                result = sb.toString();
                            } catch (Exception e) {
                                Log.i("tagconvertstr", "" + e.toString());
                            }

                            try {
                                JSONObject jObj = new JSONObject(result);

                                    donnees = jObj.getString("message");

                                    Intent ourIntent = new Intent(Subscribe.this,
                                            SubscribeMess.class);

                                    // objet qui vas nous permettre de passe des variables ici la
                                    // variable passInfo
                                    Bundle objetbunble = new Bundle();          
                                    objetbunble.putString("message", donnees);
                                    ourIntent.putExtras(objetbunble);               // on passe notre objet dans l'intent

                                    // on appelle notre activité
                                    startActivity(ourIntent);                                   

                            } catch (JSONException e) {
                                Log.i("tagjsonexp", "" + e.toString());
                            } catch (ParseException e) {
                                Log.i("tagjsonpars", "" + e.toString());
                            }


                        } else {
                            Dialog d = new Dialog(Subscribe.this);
                            d.setTitle(etPwdSub.getEditableText() +" "+etPwdConf.getEditableText());
                            d.show();
                        }

                    } else {
                        Dialog d = new Dialog(Subscribe.this);
                        d.setTitle("Fill in all the fields !");
                        d.show();
                    }

                }
            }
        });

    }

    protected void onPause() {
        super.onPause();
        finish();
    }
}

and here is the php script :

<?php

if( isset($_POST['login']) && isset($_POST['pwd']) && isset($_POST['name']) && isset($_POST['firstname'])) {

    include("connexion_bdd.php");

    if(connexionBDD() == 1){

        $login = $_POST['login'];
        $pwd = $_POST['pwd'];
        $name = $_POST['name'];
        $firstname = $_POST['firstname'];

        $sql = "SELECT colUserID
                FROM userTable 
                WHERE colUserLogin = '".$login."' ";

        $req = mysql_query($sql);
        $resultat=mysql_num_rows($req); 

        if($resultat==0){
            $temps = time();
            $clef = md5($login . $temps);

            $req = mysql_query("INSERT INTO userTable(colUserLogin, colUserPwd, colUserName, colUserFirstname, colUserKey, colUserDate)
                                        VALUES( '$login', '$pwd', '$name', '$firstname', '$clef', '$temps')");

            if($req){
                    $destinataire = $login;
                    $sujet ="Welcome on SnSR";
                    $from = "From: [email protected] \r\n";
                    $from .= "Content-Type: text/html; charset=us-ascii\r\n";

                    $message = ' Clic on the link below :<br/>
                    <a href="http://localhost/spotnshare/validation_mail.php?usrk='.$clef.' ">
                        Registration confirmation.
                    </a> ';

                    ini_set('SMTP','relay.skynet.be');

                    if(mail($destinataire,$sujet,$message,$from)){
                        $msg = 'Check your mailbox to activate your account !'; 
                    }           
                    else{
                        $msg = 'Problem sending you the activation mail !'; 
                        $req = mysql_query("DELETE FROM userTable WHERE colUserLogin = '".$pseudo."' ");
                    }
            }
            else{
                $msg = 'Problem inserting you in our database !';
            }
        }else{
                $msg = 'This email has already been used !';
        }
        mysql_free_result ($req);   

    }else{
        $msg = "Connexion problem with de DB"
        print(json_encode(array("message" => $msg)));       
    }

}else{
        $msg = "Couldn't treat your datas"
}

print(json_encode(array("message" => $msg)));

?>

5 Answers 5

11

Your request to http://192.168.1.101/spotnshare/subscribe.php is failing and returning a non-JSON string (probably a PHP error). You can print out the value with a

Log.i("tagconvertstr", "["+result+"]");

before the new JSONObject call to see what you're getting before parsing it.

EDIT: if you are using Eclipse you can set a break point and step through to see what's going on.

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

2 Comments

Thanks I manage to correct some of the errors 2 ';' were missing and I could see the error with Log.i("tagconvertstr", "["+result+"]"); The that is showing is something like that :
i struck in same situation can anyone help me?
3

Thanks I manage to correct some of the errors 2 ';' were missing and I could see the error with Log.i("tagconvertstr", "["+result+"]");

The msg that it is showing is something like that :

[<br/ > font size = 1 table class=''xdebug-erroe' dir='ltr' ... loads of html code that wasn't in my initial code then....{"message":"Problem sending you the activation mail !"}]

So there's a problem with the json format on that message "Problem sending you the activation mail" but the user was registered OK!

So the second time i would try that code it would show me in a correct json format : "This email has already been used" ! (without any errors) but i still can't find the error in my php code : S

Comments

0

try preventing any output before your print and change the print to echo

you may also remove the closing ?> to prevent further output after the php script

<?php
ob_start();
if( isset($_POST['login']) && isset($_POST['pwd']) && isset($_POST['name']) && isset($_POST['firstname'])) {

    include("connexion_bdd.php");

    if(connexionBDD() == 1){

        $login = $_POST['login'];
        $pwd = $_POST['pwd'];
        $name = $_POST['name'];
        $firstname = $_POST['firstname'];

        $sql = "SELECT colUserID
                FROM userTable 
                WHERE colUserLogin = '".$login."' ";

        $req = mysql_query($sql);
        $resultat=mysql_num_rows($req); 

        if($resultat==0){
            $temps = time();
            $clef = md5($login . $temps);

            $req = mysql_query("INSERT INTO userTable(colUserLogin, colUserPwd, colUserName, colUserFirstname, colUserKey, colUserDate)
                                        VALUES( '$login', '$pwd', '$name', '$firstname', '$clef', '$temps')");

            if($req){
                    $destinataire = $login;
                    $sujet ="Welcome on SnSR";
                    $from = "From: [email protected] \r\n";
                    $from .= "Content-Type: text/html; charset=us-ascii\r\n";

                    $message = ' Clic on the link below :<br/>
                    <a href="http://localhost/spotnshare/validation_mail.php?usrk='.$clef.' ">
                        Registration confirmation.
                    </a> ';

                    ini_set('SMTP','relay.skynet.be');

                    if(mail($destinataire,$sujet,$message,$from)){
                        $msg = 'Check your mailbox to activate your account !'; 
                    }           
                    else{
                        $msg = 'Problem sending you the activation mail !'; 
                        $req = mysql_query("DELETE FROM userTable WHERE colUserLogin = '".$pseudo."' ");
                    }
            }
            else{
                $msg = 'Problem inserting you in our database !';
            }
        }else{
                $msg = 'This email has already been used !';
        }
        mysql_free_result ($req);   

    }else{
        $msg = "Connexion problem with de DB"
        print(json_encode(array("message" => $msg)));       
    }

}else{
        $msg = "Couldn't treat your datas"
}
ob_end_clean()
echo(json_encode(array("message" => $msg)));

Comments

0

You should set Content-Type header before sending back the response.

header('Content-Type: application/json');
print(json_encode(array("message" => $msg)));

Check this : Returning JSON from a PHP Script

Comments

0

I have the same problem; i found the solution the easy way.

In Java code just type Log.e("anyText",response); In logCat it will show you what is problem

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.