Android 工作室 Volley - 无法访问 API

Android studio Volley - unable to access API

初学者警报。

我正在尝试在 Android Studio 中使用 Volley 来访问我在付费网络域上编写和托管的 API。我在下面粘贴了我正在使用的代码。

代码应该传递 API 两个参数。第一个参数命名为 "apicall",第二个参数(从 mysql 数据库查询的查询)命名为 "q"。但是总是返回错误响应消息(日志显示 "pppp3: out")。

我可以使用 Javascript 从网页访问此 API。所以我想知道下面的代码中是否遗漏了什么?


        String num1 = "selectjson";
        String num2 = "Select Region_Name from regions";

        String url = String.format("https://xxxxxxxxx.co.za/api/query_database_api.php?apicall=%1$s&q=%2$s", num1, num2);

        Log.d(TAG, "pppp1: " + url);

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        //atvAnimalName.setText("Response: " + response.toString());
                        Log.d(TAG, "pppp2: " + "In");
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d(TAG, "pppp3: " + "out");
                    }
                });

// Access the RequestQueue through your singleton class.
        ClsMySingleton.getInstance(actAddSighting.this).addToRequestQueue(jsonObjectRequest);

如果你赢了使用日志调试 volley,将你的 onErrorResponse 更改为

@Override
public void onErrorResponse(VolleyError error) {
       VolleyLog.d(TAG, "Error: " + error.getMessage());
}

之后你可以告诉我错误,我会尝试检查错误

编辑: 因为你的错误日志是:

com.android.volley.ParseError: org.json.JSONException: Value [{"Region_Name":"Southern Africa"}] of type org.json.JSONArray cannot be converted to JSONObject

这意味着您的服务器响应是数组,您可以将您的请求更改为:

JsonArrayRequest jsonObjectRequest = new JsonArrayRequest
        (Request.Method.GET, url, null, new Response.Listener<JSONArray>() {

            @Override
            public void onResponse(JSONArray response) {
                //atvAnimalName.setText("Response: " + response.toString());
                Log.d(TAG, "pppp2: " + response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
            }
        });

希望这对您有所帮助