Я пытаюсь сделать страницу регистрации из андроида активности connectiong данных в мою sqldatabase, я получаю эту ошибку "org.json.JSONException: Значение
Прежде всего, может ли кто-нибудь посоветовать мне, как отлаживать мою программу при использовании базы данных mysql с php-скриптом для приложения для Android? Потому что я обычно использую лог-кошку, но здесь ошибки не так ясны: S …
Вот код активности:
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(".+@.+\\.[az]+"); 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(); } }
и вот сценарий php:
<?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: SpotnShareReminder@live.com \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))); ?>
в<?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: SpotnShareReminder@live.com \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))); ?>
Ваш запрос на http://192.168.1.101/spotnshare/subscribe.php не работает и возвращает строку, отличную от JSON (возможно, ошибку PHP). Вы можете распечатать значение с помощью
Log.i("tagconvertstr", "["+result+"]");
перед new JSONObject
чтобы увидеть, что вы получаете, прежде чем разбирать его.
EDIT: если вы используете Eclipse, вы можете установить точку останова и перейти, чтобы узнать, что происходит.
Спасибо, мне удалось исправить некоторые ошибки 2 ';' и я вижу ошибку с Log.i ("tagconvertstr", "[" + result + "]");
Msg, который он показывает, выглядит примерно так:
[<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 !"}]
Таким образом, существует проблема с json-форматом в этом сообщении «Проблема с отправкой почты активации», но пользователь был зарегистрирован OK!
Поэтому во второй раз, когда я попробую этот код, он покажет мне правильный формат json: «Это письмо уже было использовано»! (без ошибок), но я все еще не могу найти ошибку в моем PHP-коде: S
попробуйте предотвратить выход из печати перед печатью и изменить print
на echo
вы также можете удалить закрытие ?>
чтобы предотвратить дальнейший вывод после php-скрипта
<?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: SpotnShareReminder@live.com \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)));
в<?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: SpotnShareReminder@live.com \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)));
Перед отправкой ответа вы должны установить заголовок Content-Type
.
header('Content-Type: application/json'); print(json_encode(array("message" => $msg)));
Проверьте это: Возврат JSON из скрипта PHP