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!"}

*ファイル: *

relogin.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 に答える