与Android的StringRequest获取JSONARRAY



我试图通过在Android中使用stringRequest与后者一起使用stringRequest。

php-script的书面形式如下:

$statement = mysqli_prepare($con, "SELECT * FROM tickets WHERE user_id > 5 AND completed = 1");
    mysqli_stmt_bind_param($statement, "i", $UID);
    mysqli_stmt_execute($statement);
    mysqli_stmt_store_result($statement);
    mysqli_stmt_bind_result($statement, $user_id, $beacon_id, $timeFrom, $timeTo, $completed);

    $jsonObject = array();
    $response = array();
    while($status = mysqli_stmt_fetch($statement)){
            $jsonObject = null;
            $jsonObject["beacon_id"]= $beacon_id;
            $jsonObject["timeFrom"]= $timeFrom;
            $jsonObject["timeTo"]= $timeTo;
            $response[] = $jsonObject;
    }
echo json_encode($response);?>

使用php-script访问网页,以下jsonarray被"回声":

[{"beacon_id":10,"timeFrom":"2018-02-14 13:07:11","timeTo":"2018-02-14 14:32:53"},{"beacon_id":3,"timeFrom":"2018-02-24 13:33:37","timeTo":"2018-02-24 13:33:47"}]

据我了解,这是一个普通的jsonarray,具有代表数组中每个jsonobject的数组和卷曲托架的正方形托架。

当我尝试通过Android Studio(Java(的StringRequest访问此JSONARRAY时,我没有得到任何结果...

StringRequest代码:

public class HistoryRequest extends StringRequest {
    private static final String HISTORY_REQUEST_URL = "http://myURL.../myPHPfile.php";
    private Map<String, String> params;
    public HistoryRequest(String user_id, String instanceID, Response.Listener<String> listener) {
        super(Method.POST, HISTORY_REQUEST_URL, listener, null);
        params = new HashMap<>();
        params.put("user_id", user_id);
        params.put("instanceID", instanceID);
}
    @Override
    public Map<String, String> getParams() {return params;}
}

主进性中的响应式依赖器的书面形式类似:

Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
    JSONArray jsonArray = new JSONArray(response);
    for(int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        String timeFrom = jsonObject.getString("timeFrom");
        String timeTo = jsonObject.getString("timeTo");
        textviewFrom.append(timeFrom);
        textviewTo.append(timeTo);
        }
    }
};

有什么提示为什么我不能对网页URL中的字符串进行jsonarray,看起来像一个美丽的jsonarray?

预先感谢!

更新:

切换到jsonarrayrequest而不是字符串request后,如果将php-script的mySQL部分更改为静态的东西,我可以获取数据:

SELECT * FROM tickets;

然后我可以显示所有条目。但是我倾向于将1个参数发送到服务器(user_id(,以便我可以根据登录的用户过滤条目。[从tickets中select *从user_id =??。

一个知道该怎么办的人?阅读几个您无法@override the getParams((的地方 - 用于此的方法...

已解决:

我通过在URL中输入keyValue(user_id(解决了问题。

//Instead of POST:
$user_id = $_POST["user_id"];
// I use SERVER to get the value after ? in the URL:
$user_id = $_SERVER['QUERY_STRING'];

使用以下Java代码进行此操作:

public class HistoryRequest extends JsonArrayRequest {
private static final String HISTORY_REQUEST_URL = "http://myURLorIPaddress/getHistory.php?";
    public HistoryRequest(String UID, Response.Listener<JSONArray> listener) throws JSONException {
        super(Method.POST, HISTORY_REQUEST_URL + UID,null, listener, null);
}
}

这使得基于用户_id的结果可以过滤结果,并且像魅力一样工作:d

我没有打印任何东西,但是我可以看到射击库在抱怨某些外部错误(没有提到我的代码(。log.i(" onResponselog",响应(不提供任何内容。

logcat的错误图片:

我在类似项目中工作,您是否检查了是否有一些空条目?我认为问题可能会通过检查您的logcat图片存在。

使用isNull((函数检查可能是个好主意。https://processing.org/reference/jsonobject_isnull_.html

最新更新