2013-09-26 109 views
1

在試圖找到一種方法後,我想問如何通過JSON將數據從PHP正確發送到Android應用程序?如何正確地發送數據從PHP到Android通過JSON?

在我的應用程序中,我有一個自定義對話框,輸入電子郵件地址。 這將通過JSONParser.makeHttpRequest發送到php文件。 - >這是工作! 當我嘗試響應返回給我的android應用它給了我以下錯誤:

的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」我服務器它的工作原理,並給了我下面的代碼:在正常的網頁瀏覽器

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

好吧我終於想通了我自己。 問題是/從「check_mail.php」中的「class.phpmailer.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後,它工作得很好!

相關問題