1

经过数小时试图找到一种方法后,我想问如何通过 JSON 将数据从 PHP 正确发送到 Android 应用程序?

在我的应用程序中,我有一个自定义对话框,我在其中输入一个电子邮件地址。这将通过 JSONParser.makeHttpRequest 发送到 php 文件。-> 这是有效的!当我尝试将响应发送回我的 android 应用程序时,它给了我以下错误:

日志猫:

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: <919740395d59ef297e32e9e0aaaee688@localhost> 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!"}

*文件:*

reglogin.java - 异步任务

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);
    }
?>
4

1 回答 1

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";

在这条线的注释之后,它工作得很好!

于 2013-09-27T10:47:02.233 回答