2013-09-26 5 views
1

После нескольких часов, пытаясь найти способы, я хотел бы спросить, как я могу правильно отправлять данные с PHP на приложение Android через JSON?Как правильно отправлять данные с php на android через json?

В моем приложении у меня есть собственное диалоговое окно, в котором я ввожу адрес электронной почты. Это будет отправлено через JSONParser.makeHttpRequest в php-файл. -> Это работает! Когда я пытаюсь отправить ответ обратно на мой андроид приложения он дает мне следующую ошибку:

Logcat:

09-26 13:12:02.777: E/JSON Parser(26892): Error parsing data org.json.JSONException: Value 2013-09-26 of type java.lang.String cannot be converted to JSONObject 

Когда я пытаюсь запустить следующий PHP «check_mail.php» через браузер на мой сервер работает и дает мне следующий код:

выход при нормальном WebBrowser

2013-09-26 11:29:43 CLIENT -> SERVER: EHLO localhost 2013-09-26 11:29:43  
CLIENT -> SERVER: AUTH LOGIN 2013-09-26 11:29:43  
CLIENT -> SERVER: MzUyMjFtYWlsMQ== 2013-09-26 11:29:43 
CLIENT -> SERVER: eWx2dDNoOQ== 2013-09-26 11:29:43 
CLIENT -> SERVER: MAIL FROM: 2013-09-26 11:29:44  
CLIENT -> SERVER: RCPT TO: 2013-09-26 11:29:45 
CLIENT -> SERVER: DATA 2013-09-26 11:29:46 
CLIENT -> SERVER: Date: Thu, 26 Sep 2013 13:29:37 +0200 2013-09-26 11:29:46 
CLIENT -> SERVER: Return-Path: 2013-09-26 11:29:46 
CLIENT -> SERVER: To: zensored 2013-09-26 11:29:46 
CLIENT -> SERVER: From: zensored 2013-09-26 11:29:46 
CLIENT -> SERVER: Subject: CheatApp your login Data 2013-09-26 11:29:46 
CLIENT -> SERVER: Message-ID: <[email protected]> 2013-09-26 11:29:46 
CLIENT -> SERVER: X-Priority: 3 2013-09-26 11:29:46 
CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.7 (https://github.com/PHPMailer/PHPMailer/) 2013-09-26 11:29:46 
CLIENT -> SERVER: MIME-Version: 1.0 2013-09-26 11:29:46 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1 2013-09-26 11:29:46 
CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 2013-09-26 11:29:46 
CLIENT -> SERVER: 2013-09-26 11:29:46 
CLIENT -> SERVER: Body with login data... 2013-09-26 11:29:46 
CLIENT -> SERVER: 2013-09-26 11:29:46 
CLIENT -> SERVER: . 2013-09-26 11:29:46 
CLIENT -> SERVER: QUIT {"success":1,"message":"Your data has been send to your email!"} 

* FILES: *

reglogin.java - AsyncTask

String TAG_SUCCESS = "success"; 
String TAG_MESSAGE = "message"; 

/** 
* Background Async Task to check the email 
**/ 

    private class checkEMail extends AsyncTask<String, String, String> {   
     // show progressdialog, while email is be checked 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(loginreg.this); 
      pDialog.setMessage("Check entered emailadress..."); 
      pDialog.setIndeterminate(false);    
      pDialog.show();    
     } 

     /** 
     * Check the mail 
     * */ 
     @Override 
     protected String doInBackground(String... args) { 
      // new jsonParser 
      jsonParser = new JSONParser(); 

      // configure the paremeters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("BENUTZER_EMAIL", email)); 

      // Log the entered emailadress 
      Log.v("EMAIL: ", email); 

      // configure json variable 
      JSONObject json = jsonParser.makeHttpRequest(url_check_mail, 
        "POST", params); 

      // give a log if json is null 
      if(json == null){ 
       Log.v("JSON: ", "IS NULL"); 
      } 

      // check for message & success tag 
      try { 
       Log.v("message", json.getString(TAG_MESSAGE)); 
       Log.v("success", ""+json.getInt(TAG_SUCCESS)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     /** 
     * Dismiss the progressdialog an show a toastmessage 
     * **/ 
     @Override 
     protected void onPostExecute(String file_url) {   
      pDialog.dismiss();    
      Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
     } 

    } 

check_mail.php

<?php 
    /*FILE DESCRIPTION 
     Name: check_mail.php 
     Developer: M. Seiz 
     Last change: 26.09.2013 
     -> This php file is checking the email adress from reglogin.java and if the email exists it sends 
      the login data to the entered email adress! 
    */ 

    $response = array(); 

    //Check if required field isset 
    if (isset($_POST['BENUTZER_EMAIL'])) { 

     // write the email adress from android application to a local variable 
     $useremail = $_POST['BENUTZER_EMAIL']; 

     // include database connection class 
     require_once 'db_connect.php'; 

     // connecting to database 
     $db = new DB_CONNECT(); 

     // check if the email exists 
     $checkifuserexists = "SELECT COUNT(*) num FROM benutzer WHERE BENUTZER_EMAIL = '$useremail'"; 
     $result = mysql_query($checkifuserexists) or die('error'); 
     $row = mysql_fetch_assoc($result); 

     // if there is an entry with this email 
     if($row['num']) { 
      // asking for userdata 
      $checkifemailexists = "SELECT BENUTZER_NAME, BENUTZER_PASSWORT FROM benutzer WHERE BENUTZER_EMAIL = '$useremail'"; 
      $result = mysql_query($checkifemailexists) or die('error'); 
      $row = mysql_fetch_assoc($result); 

      // write userdata to local variables 
      $username = $row['BENUTZER_NAME']; 
      $userpw = $row['BENUTZER_PASSWORT']; 
      $useremail = $useremail; 

      //include once the phpmail.php class 
      require_once('phpmailer/class.phpmailer.php'); 

      // setting up the email data 
      $mail = new PHPMailer(); 
      $mail->IsSMTP(); 
      $mail->SMTPDebug = 1; 
      $mail->SMTPAuth = true; 
      $mail->SMTPSecure = 'ssl'; 
      $mail->Host = "smtp.easyname.eu"; 
      $mail->Port = 465; 
      $mail->IsHTML(true); 
      $mail->Username = "zensored"; 
      $mail->Password = "zensored"; 
      $mail->SetFrom("zensored"); 
      $mail->Subject = 'CheatApp your login Data'; 
      $mail->Body = 'Body with login data...'; 
      $mail->AddAddress($useremail); 

      // if the mail could not be send... 
      if(!$mail->Send()){ 
       $response["success"] = 0; 
       $response["message"] = 'E-Mail could not be send!'; 
       echo json_encode($response); 
      } else { 
       $response["success"] = 1; 
       $response["message"] = 'Your data has been send to your email!'; 
       echo json_encode($response); 
      } 

     } else { 
      $response["success"] = 0; 
      $response["message"] = 'E-Mail does not exist!'; 
      echo json_encode($response); 
     } 

    } else { 
     $response["success"] = 0; 
     $response["message"] = "Required field(s) is missing"; 
     echo json_encode($response); 
    } 
?> 

ответ

0

Ладно, наконец, я понял это сам. Проблема заключается в том, что «class.phpmailer.php» из «check_mail.php» содержит другой класс, который называется «class.smtp.php». Если вы посмотрите на первую строку на выходе браузера, это дата со временем!

LogCat говорит:

09-26 13:12:02.777: E/JSON Parser(26892): Error parsing data org.json.JSONException: Value 2013-09-26 of type java.lang.String cannot be converted to JSONObject 

Так что я не знаю, почему, но эта дата дается тоже ответ jsonparser!

На этот раз напечатан в "class.smtp.php" здесь:

echo gmdate('Y-m-d')."\t".trim($str)."\n"; 

После outcommenting этой линии, она работает очень хорошо !!

Смежные вопросы