2016-05-17 3 views
-1

JsonObjectRequest Всегда возвращает onErrorResponse в андроидаJsonObjectRequest всегда возвращается на ErrorResponse

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

Который приносит ответ, но бег of6 андроид телефон всегда падает на ошибки Кто-нибудь есть идея, что неправильно с кодом?

ответ

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); 

} 
0

Цитирования документации, getJSONArray

Возвращает значение отображенного по имени, если оно существует и является JSONArray или бросков в противном случае.

и проверка ответа от этой точки «значение» API, похоже, не существует. Надеюсь, я не ошибаюсь, но я не могу найти какое-либо свойство с именем «value».

+0

Если этот результат то, что у меня есть место в регистре я JSONObject OBJ = response.getJSONObject (I); Я имею в виду результаты этого сайта http://api.tvmaze.com/search/shows?q=girls –

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(); 
      } 
     }); 
+0

תרגם אם זו התוצאה שלי מה אני צריכה לרשום במקום ה я JSONObject OBJ = response.getJSONObject (я); Если этот результат является тем, что у меня есть в регистре i JSONObject obj = response.getJSONObject (i); –

+0

шоу: { ID: 139, URL: "http://www.tvmaze.com/shows/139/girls", название: "Девушки", типа: "Scripted", язык: "Английский" , жанров: [ "драма", "Романтика" ], статуса: "Запуск", выполнения: 30, премьер: "2012-04-15", графика: { времени: «22: 00" , дней: [ "воскресенье" ] }, оценка: { средний: 6,3 }, вес: 1, сети: { ID: 8, название: "ГБО", страна: { название: "Соединенные Штаты Америки", код: "США", часовой пояс: "Америка/Триатлон" } }, webChannel: нулевая, внешние: { tvrage: 30124, thetvdb: 220411, IMDB: "tt1723816" –

+0

Я имею в виду результаты этого сайта http://api.tvmaze.com/search/shows?q= girls –

Смежные вопросы