JsonObjectRequest始终在ErrorResponse上返回

时间:2016-05-17 20:37:21

标签: java android jsonobjectrequest

JsonObjectRequest始终在android

中返回onErrorResponse
public void clickFind(final View view) {
    EditText find = (EditText) findViewById((R.id.editText));
  //  String
   web = "http://api.tvmaze.com/search/shows?q=" + find.getText();
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, web, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("value");

                lv = (ListView) findViewById(R.id.listView);
                RowItem ri = null;
                 URL newurl = null;
                for (int i = 0; i < jsonArray.length(); i++) {

                    try {
                        newurl = new URL(jsonArray.getJSONObject(i).getString("image"));
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                    ri = new RowItem(newurl,jsonArray.getJSONObject(i).getString("name")
                         ,jsonArray.getJSONObject(i).getString("summary"));


                }

                CustomListViewAdapter adapter = new CustomListViewAdapter(view.getContext(),R.layout.cf, ri);
                lv.setAdapter(adapter);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Context context = view.getContext();
            Toast.makeText(context, "error to upload "+web, Toast.LENGTH_SHORT).show();
        }
    });
    queue.add(request);

} }

例如: http://api.tvmaze.com/search/shows?q=bob

这带来了回复,但是运行6个android手机总是出错 有没有人知道代码有什么问题?

3 个答案:

答案 0 :(得分:0)

引用文档getJSONArray

  

返回按名称映射的值(如果存在)并且是JSONArray,或者   否则抛出。

并检查来自该api端点的响应&#34;值&#34;似乎不存在。我希望我没错,但我找不到任何名为&#34; value&#34;的财产。

答案 1 :(得分:0)

来自http://api.tvmaze.com/search/shows?q=bob的响应是JSON数组,而不是JSONObject。因此,您需要使用JsonArrayRequest代替此JsonObjectRequest -

JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, web,new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {

                    for(int i = 0; i < response.length(); i++){
                        JSONObject obj = response.getJSONObject(i);//This is your Json object which you can parse now.
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {

                 Context context = view.getContext();
            Toast.makeText(context, "error to upload "+web, Toast.LENGTH_SHORT).show();
            }
        });

答案 2 :(得分:0)

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

        public void onResponse(JSONArray response) {

            try {
                whichList++;
                lv = (ListView) findViewById(R.id.listView);
                RowItem ri[] = new RowItem[response.length()];


                for (int i = 0; i < response.length(); i++) {

                    JSONObject jsonArray = response.getJSONObject(i).getJSONObject("show");
                    ri[i] = new RowItem(jsonArray.getString("id"), "", "", jsonArray.getJSONObject("image").getString("medium"), jsonArray.getString("name")
                            , jsonArray.getString("summary"));


                }

                ArrayAdapterItem adapter = new ArrayAdapterItem(view.getContext(), R.layout.cf, ri);

                lv.setAdapter(adapter);

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            Context context = view.getContext();
            Toast.makeText(context, "error to upload " + web, Toast.LENGTH_SHORT).show();
        }
    });
    queue.add(request);

}