Php Android截取字符串响应未转换为JsonObject
我正在尝试从服务器(在PHP上运行并发送JsonObject响应的服务器后端)从字符串响应获取数据,然后将其转换为JsonObject,以正确获取数据。但是Android截击显示以下错误: org.json.JSONException:java.lang.String类型的值db无法转换为JSONObject 我的代码如下Php Android截取字符串响应未转换为JsonObject,php,android,json,string,android-volley,Php,Android,Json,String,Android Volley,我正在尝试从服务器(在PHP上运行并发送JsonObject响应的服务器后端)从字符串响应获取数据,然后将其转换为JsonObject,以正确获取数据。但是Android截击显示以下错误: org.json.JSONException:java.lang.String类型的值db无法转换为JSONObject 我的代码如下 public void loginFunction(String a, String b) { progressDialog.setMessage
public void loginFunction(String a, String b) {
progressDialog.setMessage("Please Wait, We are Inserting Your Data on Server");
progressDialog.show();
final String user_email_insert = a;
final String user_password_insert = b;
String HttpUrl = getString(R.string.server_name)+getString(R.string.log_in_api);
StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String ServerResponse) {
progressDialog.dismiss();
try {
JSONObject person = new JSONObject(ServerResponse);
String name = person.getString("user_full_name");
String email = person.getString("user_email");
Log.d("1111",person.toString());
Toast.makeText(getApplicationContext(), name+"\n"+email, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
progressDialog.dismiss();
Toast.makeText(LogIn.this, volleyError.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("user_email", user_email_insert);
params.put("user_password", user_password_insert);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(LogIn.this);
requestQueue.add(stringRequest);
}
public void登录函数(字符串a、字符串b){
setMessage(“请稍候,我们正在服务器上插入您的数据”);
progressDialog.show();
最终字符串user\u email\u insert=a;
最终字符串user\u password\u insert=b;
String HttpUrl=getString(R.String.server\u name)+getString(R.String.log\u在\u api中);
StringRequest StringRequest=新的StringRequest(Request.Method.POST,HttpUrl,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串ServerResponse){
progressDialog.disclose();
试一试{
JSONObject person=新的JSONObject(ServerResponse);
String name=person.getString(“用户全名”);
String email=person.getString(“用户电子邮件”);
Log.d(“1111”,person.toString());
Toast.makeText(getApplicationContext(),name+“\n”+电子邮件,Toast.LENGTH\u LONG.show();
}捕获(JSONException e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),“错误:+e.getMessage(),Toast.LENGTH_LONG).show();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
progressDialog.disclose();
Toast.makeText(LogIn.this,volleyError.toString(),Toast.LENGTH_LONG.show();
}
}) {
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“用户电子邮件”,用户电子邮件插入);
参数put(“用户密码”,用户密码插入);
返回参数;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(LogIn.this);
添加(stringRequest);
}
PHP代码是:
<?php
include "db_connection.php";
$user_email = $_POST["user_email"];
$user_password = $_POST["user_password"];
$sql = "SELECT user_password,user_full_name,user_email FROM user_info WHERE user_email ='" .$user_email. "'";
mysqli_query($con,'SET CHARACTER SET utf8');
mysqli_query($con,"SET SESSION collation_connection ='utf8_general_ci'");
$res = mysqli_query($con,$sql);
$row = mysqli_fetch_row($res);
if($user_password == $row[0]){
// echo "Login successfull".$row[1];
$myObj->user_full_name = $row[1];
$myObj->user_email = $row[2];
$myJSON = json_encode($myObj,JSON_UNESCAPED_UNICODE);
echo $myJSON;
//echo "Login successfull";
}else{
echo "Wrong password";
//header( 'Location: login_failed.php' ) ;
}
mysqli_close($con);
?>
您是否检查了postman中的响应?可能与从不以明文形式存储用户密码重复。仅存储密码散列。使用password\u hash()
生成散列,并使用password\u verify()
根据存储的散列验证密码。您也非常容易接受SQL注入,应该使用带有占位符的预处理语句,而不是像这样手动将用户数据注入到查询中(完全未经转移)。问题很简单,您希望得到一个json格式的响应,但是您没有得到它,您在响应中得到的是html或任何其他非json字符串,很可能是一条php错误消息。在尝试将.d(ServerResponse)转换为JSONObject之前,请尝试登录它,或者使用断点,或者使用邮递员发出请求并查看实际响应。