我正在尝试处理由php发送的json响应,我在这个
android代码中通过Volley响应接收但是经过一些调试后我发现处理json对象的代码部分没有执行从行
JSONObject jObj = new JSONObject(响应);我在它之前打印了一个日志并且正在打印,所以如果你能帮助我找出问题我会很高兴.
android代码:
private void checkLogin(final String email, final String password) {
// Tag used to cancel the request
String tag_string_req = "req_login";
pDialog.setMessage("Logging in ...");
showDialog();
StringRequest strReq = new StringRequest(Method.POST,
AppConfig.URL_REGISTER, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "Login Response: " + response.toString());
hideDialog();
try {
Log.d("Login","You're in the try portion of the code");
JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error");
// Check for error node in json
if (!error) {
// user successfully logged in
// Create login session
Log.d("Login", "user successfully logged in");
session.setLogin(true);
// Launch main activity
Intent intent = new Intent(LoginActivity.this,
MainActivity.class);
startActivity(intent);
finish();
} else {
// Error in login. Get the error message
String errorMsg = jObj.getString("error_msg");
Toast.makeText(getApplicationContext(),
errorMsg, Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Login Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_LONG).show();
hideDialog();
}
}) {
@Override
protected Map<String, String> getParams() {
// Posting parameters to login url
Map<String, String> params = new HashMap<String, String>();
params.put("tag", "login");
params.put("email", email);
params.put("password", password);
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}
php代码:
<?php
header('Content-Type: application/json');
/**
* File to handle all API requests
* Accepts GET and POST
*
* Each request will be identified by TAG
* Response will be JSON data
/**
* check for POST request
*/
if (isset($_POST['tag']) && $_POST['tag'] != '') {
// get tag
$tag = $_POST['tag'];
// include db handler
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
// response Array
$response = array("tag" => $tag, "error" => FALSE);
// check for tag type
if ($tag == 'login') {
// Request type is check Login
$email = $_POST['email'];
$password = $_POST['password'];
// check for user
$user = $db->getUserByEmailAndPassword($email, $password);
if ($user != false) {
// user found
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user not found
// echo json with error = 1
$response["error"] = TRUE;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}
} else if ($tag == 'register') {
// Request type is Register new user
$name = $_POST['name'];
$email = $_POST['email'];
$password = $_POST['password'];
// check if user is already existed
if ($db->isUserExisted($email)) {
// user is already existed - error response
$response["error"] = TRUE;
$response["error_msg"] = "User already existed";
echo json_encode($response);
} else {
// store user
$user = $db->storeUser($name, $email, $password);
if ($user) {
// user stored successfully
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
echo json_encode($response);
} else {
// user failed to store
$response["error"] = true;
$response["error_msg"] = "Error occured in Registartion";
echo json_encode($response);
}
}
} else {
// user failed to store
$response["error"] = TRUE;
$response["error_msg"] = "Unknow 'tag' value. It should be either 'login' or 'register'";
echo json_encode($response);
}
} else {
$response["error"] = TRUE;
$response["error_msg"] = "Required parameter 'tag' is missing!";
echo json_encode($response);
}
?>
logcat中的响应:
09-16 02:14:11.785: D/LoginActivity(4314): <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0029</td><td bgcolor='#eeeeec' align='right'>143512</td><td bgcolor='#eeeeec'>{main}( )</td><td title='D:\wamp\www\android_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>0</td></tr>
09-16 02:14:11.785: D/LoginActivity(4314): <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0045</td><td bgcolor='#eeeeec' align='right'>158264</td><td bgcolor='#eeeeec'>DB_Functions->__construct( )</td><td title='D:\wamp\www\android_login_api\index.php' bgcolor='#eeeeec'>..\index.php<b>:</b>20</td></tr>
09-16 02:14:11.785: D/LoginActivity(4314): <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0060</td><td bgcolor='#eeeeec' align='right'>162616</td><td bgcolor='#eeeeec'>DB_Connect->connect( )</td><td title='D:\wamp\www\android_login_api\include\DB_Functions.php' bgcolor='#eeeeec'>..\DB_Functions.php<b>:</b>13</td></tr>
09-16 02:14:11.785: D/LoginActivity(4314): <tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.0072</td><td bgcolor='#eeeeec' align='right'>163184</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.mysql-connect' target='_new'>mysql_connect</a>
09-16 02:14:11.785: D/LoginActivity(4314): ( )</td><td title='D:\wamp\www\android_login_api\include\DB_Connect.php' bgcolor='#eeeeec'>..\DB_Connect.php<b>:</b>18</td></tr>
09-16 02:14:11.785: D/LoginActivity(4314): </table></font>
09-16 02:14:11.785: D/LoginActivity(4314): {"tag":"login","error":false,"uid":"55ef78acac6190.14514751","user":{"name":"Taha Souri 5","email":"taha_sr2002@yahoo.com","created_at":"2015-09-09 02:09:16","updated_at":null}}
09-17 01:03:17.081: W/System.err(24259): org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
09-17 01:03:17.081: W/System.err(24259): at org.json.JSON.typeMismatch(JSON.java:111)
09-17 01:03:17.081: W/System.err(24259): at org.json.JSONObject.<init>(JSONObject.java:159)
09-17 01:03:17.081: W/System.err(24259): at org.json.JSONObject.<init>(JSONObject.java:172)
09-17 01:03:17.081: W/System.err(24259): at info.androidhive.loginandregistration.LoginActivity$3.onResponse(LoginActivity.java:104)
09-17 01:03:17.081: W/System.err(24259): at info.androidhive.loginandregistration.LoginActivity$3.onResponse(LoginActivity.java:97)
09-17 01:03:17.081: W/System.err(24259): at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
09-17 01:03:17.081: W/System.err(24259): at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
09-17 01:03:17.081: W/System.err(24259): at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
09-17 01:03:17.082: W/System.err(24259): at android.os.Handler.handleCallback(Handler.java:808)
09-17 01:03:17.082: W/System.err(24259): at android.os.Handler.dispatchMessage(Handler.java:103)
09-17 01:03:17.082: W/System.err(24259): at android.os.Looper.loop(Looper.java:193)
09-17 01:03:17.082: W/System.err(24259): at android.app.ActivityThread.main(ActivityThread.java:5322)
09-17 01:03:17.082: W/System.err(24259): at java.lang.reflect.Method.invokeNative(Native Method)
09-17 01:03:17.082: W/System.err(24259): at java.lang.reflect.Method.invoke(Method.java:515)
09-17 01:03:17.082: W/System.err(24259): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
09-17 01:03:17.082: W/System.err(24259): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
09-17 01:03:17.082: W/System.err(24259): at dalvik.system.NativeStart.main(Native Method)
其他php代码:
<?php
class DB_Functions {
private $db;
//put your code here
// constructor
function __construct() {
require_once 'DB_Connect.php';
// connecting to database
$this->db = new DB_Connect();
$this->db->connect();
}
// destructor
function __destruct() {
}
/**
* Storing new user
* returns user details
*/
public function storeUser($name, $email, $password) {
$uuid = uniqid('', true);
$hash = $this->hashSSHA($password);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = $hash["salt"]; // salt
$result = mysql_query("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
// check for successful store
if ($result) {
// get user details
$uid = mysql_insert_id(); // last inserted id
$result = mysql_query("SELECT * FROM users WHERE uid = $uid");
// return user details
return mysql_fetch_array($result);
} else {
return false;
}
}
/**
* Get user by email and password
*/
public function getUserByEmailAndPassword($email, $password) {
$result = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error());
// check for result
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
$result = mysql_fetch_array($result);
$salt = $result['salt'];
$encrypted_password = $result['encrypted_password'];
$hash = $this->checkhashSSHA($salt, $password);
// check for password equality
if ($encrypted_password == $hash) {
// user authentication details are correct
return $result;
}
} else {
// user not found
return false;
}
}
/**
* Check user is existed or not
*/
public function isUserExisted($email) {
$result = mysql_query("SELECT email from users WHERE email = '$email'");
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
// user existed
return true;
} else {
// user not existed
return false;
}
}
/**
* Encrypting password
* @param password
* returns salt and encrypted password
*/
public function hashSSHA($password) {
$salt = sha1(rand());
$salt = substr($salt, 0, 10);
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
$hash = array("salt" => $salt, "encrypted" => $encrypted);
return $hash;
}
/**
* Decrypting password
* @param salt, password
* returns hash string
*/
public function checkhashSSHA($salt, $password) {
$hash = base64_encode(sha1($password . $salt, true) . $salt);
return $hash;
}
}
?>
<?php
class DB_Connect {
// constructor
function __construct() {
}
// destructor
function __destruct() {
// $this->close();
}
// Connecting to database
public function connect() {
require_once 'include/Config.php';
// connecting to mysql
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
// selecting database
mysql_select_db(DB_DATABASE) or die(mysql_error());
// return database handler
return $con;
}
// Closing database connection
public function close() {
mysql_close();
}
}
?>
最佳答案 它应该是这样的……
$user = $db->getUserByEmailAndPassword($email, $password);
header('Content-Type:application:json;');
if ($user != false) {
// user found
$response["error"] = FALSE;
$response["uid"] = $user["unique_id"];
$response["user"]["name"] = $user["name"];
$response["user"]["email"] = $user["email"];
$response["user"]["created_at"] = $user["created_at"];
$response["user"]["updated_at"] = $user["updated_at"];
} else {
// user not found
// echo json with error = 1
$response["error"] = TRUE;
$response["error_msg"] = "Incorrect email or password!";
$response["user"] = null;
}
echo json_encode($response);