当前位置: 首页 > 知识库问答 >
问题:

对于android中的一些数据,JSONObject数组返回null

楮星鹏
2023-03-14

我对Android的JSON有问题。由于某种原因,当我使用JSONObject接收到一些数据时。getInt方法返回一些空数据。并不是我接收到的所有数据都返回null,似乎只有返回null的数据类型是整数,我还有其他整数数据,它们接收到的数据很好,没有任何null。它似乎只与3个整数变量一致。我在某个地方读到过这篇文章,认为它是一个bug,但我不确定这是不是真的。顺便说一句,我用的是Android截击。

有更好的方法吗?

        StringRequest strReq = new StringRequest(Request.Method.POST,
            AppConfig.URL_LOGIN, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d(TAG, "Login Response: " + response.toString());
            hideDialog();

            try {
                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
                    session.setLogin(true);

                    String uid = jObj.getString("uid");

                    JSONObject user = jObj.getJSONObject("user");


                    ...(OTHER Variables that return fine)


                    int activitylvl = user.getInt("activitylvl");//get null
                    int meal_plan = user.getInt("meal_plan");//get null
                    int workout_plan = user.getInt("workout_plan");//get null


        Continues.....};

编辑:这是我的回答结果

{
  "error": false,
  "uid": "56551efd883b55.31836995",
  "user": {
    "name": "Test",
    "email": "test@gmail.com",
    "goal": "1",
    "image": "",
    "gender": "M",
    "birthdate": "8/6/1993",
    "height_cm": "182",
    "height_ft": "6",
    "height_in": "0",
    "weight_kg": "74",
    "weight_lbs": "165",
    "activitylvl": null,
    "calories": "2861.43",
    "meal_plan": null,
    "workout_plan": null,
    "adjust_calories_wd": "0",
    "adjust_calories_nwd": "0",
    "workout_week": "false, false, false, false, false, false, false",
    "created_at": "2015-11-24 21:37:49",
    "updated_at": "2015-11-24 21:37:49"
  }
}

PHP

 // get the user by email and password
$user = $db->getUserByEmailAndPassword($email, $password);

if ($user != false) {
    // use is found
    $response["error"] = FALSE;
    $response["uid"] = $user["unique_id"];
    $response["user"]["name"] = $user["name"];
    $response["user"]["email"] = $user["email"];
    $response["user"]["goal"] = $user["goal"];
    $response["user"]["image"] = $user["image"];
    $response["user"]["gender"] = $user["gender"];
    $response["user"]["birthdate"] = $user["birthdate"];
    $response["user"]["height_cm"] = $user["height_cm"];
    $response["user"]["height_ft"] = $user["height_ft"];
    $response["user"]["height_in"] = $user["height_in"];
    $response["user"]["weight_kg"] = $user["weight_kg"];
    $response["user"]["weight_lbs"] = $user["weight_lbs"];
    $response["user"]["activitylvl"] = $user["activitylvl"];
    $response["user"]["calories"] = $user["calories"];
    $response["user"]["meal_plan"] = $user["meal_plan"];
    $response["user"]["workout_plan"] = $user["workout_plan"];
    $response["user"]["adjust_calories_wd"] = $user["adjust_calories_wd"];
    $response["user"]["adjust_calories_nwd"] = $user["adjust_calories_nwd"];
    $response["user"]["workout_week"] = $user["workout_week"];
    $response["user"]["created_at"] = $user["created_at"];
    $response["user"]["updated_at"] = $user["updated_at"];
    echo json_encode($response);
} else {
    // user is not found with the credentials
    $response["error"] = TRUE;
    $response["error_msg"] = "Login credentials are wrong. Please try again!";
    echo json_encode($response);
}

public function getUserByEmailAndPassword($email, $password) {
    //DO this for users db as well
    $result = mysqli_query($this->conn,"SELECT * FROM users WHERE email = '$email'") or die(mysqli_connect_errno());

    // check for result
    $no_of_rows = mysqli_num_rows($result);

    if ($no_of_rows > 0) {
        $result = mysqli_fetch_array($result);
        $salt = $result['salt'];
        $encrypted_password = $result['encrypted_password'];
        $hash = $this->checkhashSSHA($salt, $password);

        // check for password
        if ($encrypted_password == $hash) {
            return $result;
        }

    } else {
        return false;
    }

}

共有2个答案

西门良才
2023-03-14

我发现问题出在用户响应名上,这是一个php问题:

在getUserByEmailAndPassword函数中,有一个名为

mysqli_fetch_数组(mysqli_查询);

这会获取列名,并将其设置在一个数组中,其中键名作为mysql数据库中的列名。我的名字不正确。

不准确的

$response[“user”][“activitylvl”]=$user[“activitylvl”];

$response[“user”][“膳食计划”]=$user[“膳食计划”];

$响应["user"]["workout_plan"]=$user["workout_plan"];

对的

$响应[“用户”][“活动”]=$user[“活动”];

$response[“user”][“用餐计划”]=$user[“mealplan”];

$响应["user"]["workout_plan"]=$user["workoutplan"];

田成化
2023-03-14

如果您确定响应中的数据不是空的,但在尝试解析数据时,数据将变为空,并且您也确定数据字段名是正确的,则可以执行以下操作作为替代解决方案:

if (user.getString("activitylvl") != null && !user.getString("activitylvl").equalsIgnoreCase("")) {
    int activitylvl = Integer.parseInt(user.getString("activitylvl"));
}

它将JSON字段作为字符串对象获取,然后将其转换为整数对象。

 类似资料:
  • 所以我从 api 请求中将这些对象放在数组中 我需要的只是标题,这样我就可以在一个div中循环它,并把它传递给子组件,这样我就可以在html部分中循环它

  • 问题内容: Python pandas具有pct_change函数,可用于计算数据帧中股票价格的回报: 我正在使用以下代码获取对数返回值,但它给出的值与pct.change()函数完全相同: 问题答案: 这是一种使用来计算日志返回的方法。结果与所计算的总收益相似但不相同。您可以上传示例数据的副本(Dropbox共享链接)以重现您看到的不一致之处吗?

  • 问题内容: 我只是想知道-为什么返回false?实际上,数组具有相同数量的元素并且每个元素都相同吗? 例如,我执行了以下测试。 返回false并显示“不等于”。 另一方面,如果我有这样的事情: 返回true并输出“等于”。该方法仅适用于单个尺寸吗?如果是这样,Java中的多维数组是否有类似的东西? 问题答案: 使用。 true如果两个指定的数组彼此深度相等,则返回。 由于是,所以是。 至于为什么

  • 如果我有一个物体 并创建这些对象的数组 有没有一种方法可以让我只检索数组中所有对象的一个属性?例如: 上面的示例没有将set keyArray返回给任何东西,但我希望它可以设置成如下所示: 有没有人知道这样做的方法,而不需要遍历objArray并手动将每个键属性复制到键数组?

  • 因此,我得到了一个字符串,它是我在一个类上实现的toJson方法的结果,并且在我的测试代码中确认它是我的类的正确Json表示。我的目标是使用Gson将此字符串转换为JsonObject并将其传递给构造函数。然而,我遇到了一个奇怪的问题。 这是我要调用的代码: 我以前在我的项目中的许多地方,在其他类中,都使用过完全相同的代码片段,而且效果很好。我甚至将其中一段功能代码复制到这个测试类中,并进行了尝试

  • 问题内容: 在使用时,我正在获取一些价值。我搜寻了很多,但徒劳无功。 以下是我的代码: 输出控制台: 所有日期字符串的格式都是相同的,但对于几个值我还是没有。为什么这样?请帮忙。我哪里错了? 问题答案: 格式应该是24小时的 HH ,即使您只获得12小时的值。