为什么我一直收到Volley(Android)的错误回复?

时间:2018-03-07 21:09:43

标签: android android-volley

我试图使用排球向this api(特别是/ BusinessTypes /基本端点)发出请求,以便获取英国餐饮企业的类型列表,但我保留得到错误。

最初,我尝试在onCreate方法中检索数据,这是我认为可能存在的问题(但理想情况下,这是我希望能够做到的)。在空白活动上创建测试按钮并将其挂钩到发出请求的代码后,我仍然遇到同样的问题。

我定位的是API 21(不是我的选择而且无法更改)。

这是与普通活动相对应的代码,只有一个按钮,其ID为#34;但是"。

public class BasicActivity extends AppCompatActivity {

    final String FSA_EP_T = "http://api.ratings.food.gov.uk/BusinessTypes/basic";
    final String FSA_EP_R = "http://api.ratings.food.gov.uk/Regions";
    final String FSA_EP_A = "http://api.ratings.food.gov.uk/Authorities/basic";

    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_advanced_search);

        b = findViewById(R.id.but);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                doStuff();
            }
        });
    }

    private void doStuff() {
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

        JsonArrayRequest typeRequest = new JsonArrayRequest(
                Request.Method.GET,
                FSA_EP_T,
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.e("businessType", String.valueOf(response));
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.e("VolleyErr", "I keep seeing this!!!");
                    }
                }
        ) {
            @Override
            public Map<String,String> getHeaders() {
                Map<String, String>  params = new HashMap<String, String>();
                //The api requires me to specify the api version
                params.put("x-api-version","2");
                params.put("accept", "application/json");
                return params;
            }
        };

        typeRequest.setRetryPolicy(new DefaultRetryPolicy(
                10000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

        requestQueue.add(typeRequest);
    }
}

1 个答案:

答案 0 :(得分:0)

经过一番游戏,我终于意识到了我的问题。

我正在使用的api端点返回一个包含json数组的json对象,而不仅仅是像我想象的那样只有一个json数组。

我使用

提取了我需要的数组
response.getJSONArray("businessType");

其中response现在是JSONObject。

我认为这样的错误会在我的日志中自动显示,但事实并非如此。

对于其他有类似问题的人,我建议添加

Log.e("VolleyError", error.getMessage());

onErrorResponse方法。