我试图使用排球向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);
}
}
答案 0 :(得分:0)
经过一番游戏,我终于意识到了我的问题。
我正在使用的api端点返回一个包含json数组的json对象,而不仅仅是像我想象的那样只有一个json数组。
我使用
提取了我需要的数组response.getJSONArray("businessType");
其中response
现在是JSONObject。
我认为这样的错误会在我的日志中自动显示,但事实并非如此。
对于其他有类似问题的人,我建议添加
Log.e("VolleyError", error.getMessage());
到onErrorResponse
方法。