php - 如何在 JsonObject 中获取值
问题描述
我正在尝试这种新方法离子。使用 PDO,我被困在想要在 JsonObject 中获得价值的地方。我以前将 Volly 与 msqli 一起使用,但我找到了 Ion。更有条理,PDO 更安全。
每当我尝试向 java 添加任何代码时,它都会中断并且无法正常工作,就好像与 PHP 没有相同的连接一样,所以我被卡住了
我被困在的部分是 LOG_IN_SUCCESS,因为我需要获取会话管理器的用户 ID,因为 $row 仅在 java 中不显示 "LOG_IN_SUCCESS" 的情况,我还添加了 case"LOG_IN_SUCCESS":case"0":{code break ;} 但我没有工作
我尝试为 case"0" 添加新字符串,其中包含用户 ID,但代码只是中断
爪哇
private void loginbtn(final String email, final String password) {
Ion.with(getApplicationContext())
.load(HOST)
.setBodyParameter("susers_semails", email)
.setBodyParameter("susers_spasswords", password)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
try {
String completed = result.get("LOGIN").getAsString();
switch (completed){
case "Email_Doesnt_Exist":
edtemail.setError("Email Doesnt Exist");
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
case "Log_In_Success":
Intent intent = new Intent(LoginActivity.this, HomeSearchActivity.class);
startActivity(intent);
finish();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
Toast.makeText(LoginActivity.this, completed, Toast.LENGTH_LONG);
Log.d(TAG, "onCompleted: " + completed);
break;
case "Log_In_Failed":
edtpassword.setError("Incorrect Password");
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
default:
Toast.makeText(getApplicationContext(), "Ops! Error Occurred m", Toast.LENGTH_LONG).show();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
break;
}
}catch (Exception error){
Toast.makeText(getApplicationContext(), "Please Check Connection And Try Again", Toast.LENGTH_LONG).show();
loginbtn.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
});
}
php
$susers_semails = $_POST['susers_semails'];
$susers_spasswords = $_POST['susers_spasswords'];
$stmt = $PDO->prepare("SELECT susers_sids,susers_semails,susers_spasswords FROM userstbl WHERE
susers_semails = :USER_EMAIL" );
$stmt->bindParam(':USER_EMAIL',$susers_semails);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($row)) {
if (password_verify($susers_spasswords, $row['susers_spasswords'])) {
$returnApp = array( 'LOGIN' => 'Log_In_Success',$row);
echo json_encode($returnApp);
}
else {
$returnApp = array( 'LOGIN' => 'Log_In_Failed');
echo json_encode($returnApp);
}
} else {
$returnApp = array( 'LOGIN' => 'Email_Doesnt_Exist');
echo json_encode($returnApp);
}
JSON
{
0: {
susers_sids: "3"
},
LOGIN: "Log_In_Success"
}
解决方案
$row
$returnApp
作为关联数组成为对象的属性。我认为您尝试仅传递 suser_sids 所以它应该类似于
$returnApp=array(
'LOGIN' => 'Log_In_Success',
'susers_sids' => $row['susers_sids']
);
所以它将返回为:
{
LOGIN: "Log_In_Success" ,
susers_sids: "3"
}
或者,您可以使用array_merge_recursive
将行包含在我们的对象中(作为一个关联数组),但除非真的有必要,否则我不会存储/传递用户密码。
编辑:您可以/应该这样做的另一种方法是创建一个实际对象而不是使用关联数组。像这样的东西会创建一个匿名对象,您可以像现在一样将其传递给 json_encode (欢迎使用 OOP):
$returnAPP->LOGIN="Log_In_Success";
$returnAPP->susers_sids=$row['susers_sids'];
echo json_encode($returnApp);
你甚至可以定义这样的类,但 PHP 就是它,它会为你创建 stdObject ;)
推荐阅读
- django - 无法在 Django 中的两个日期之间获取当前用户数据
- reactjs - antd,根据下拉列表中的选定值设置输入字段中的值
- java - 同一个包中多个资源目录的相对路径,包含在scala spark中使用的SQL
- react-native - 在 MapBox 中找不到 MarkerView
- javascript - 提交后反应输入字段不为空
- class - 创建对象的类与创建的对象 UML 的关系
- hive - Setting database owner to a role does not allow users to create table
- reactjs - react hook useEffect 无限循环
- javascript - 如何在 ENTER 上提交表单并在没有提交按钮的情况下重定向到不同的路线?
- javascript - 动态命名范围,尝试仅打印包含数据的单元格