在试图找到一种方法之后,我想问一下如何通过JSON将数据从PHP正确发送到Android应用程序?
在我的应用程序中,我有一个自定义对话框,我在其中输入电子邮件地址。 这将通过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”时,它可以运行并给我以下代码:
在正常的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: <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 - 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 :(得分: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";
在该系列退出后,它运作良好!!