2015-10-13 2 views
0

Я искал решение, но не смог его решить.Json Parser с библиотекой волейбола

вот мой JSON

{ "Ошибка": "", "Filme": [{ "Название": "Рассвет планеты обезьян", "образ": "http://api.androidhive.info/json/movies/1.jpg", "рейтинг": 8,3, "ReleaseYear": 2014, "жанр": [ "Действие", "Драма", "Sci-Fi"] }, { "название": "Район 9", " изображение ":" http://api.androidhive.info/json/movies/2.jpg ", " рейтинг ": 8, " releaseГаз ": 2009, " Жанр ": [" Действие "," Sci-Fi "," Thriller "] }, ... ... }]}

и это мой код

// Movies json url 
private static final String url = "https://d....url...."; 
private ProgressDialog pDialog; 
private List<Movie> movieList = new ArrayList<Movie>(); 
private HorizontalListView listView; 
private CustomListAdapter adapter; 

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

    listView = (HorizontalListView) findViewById(R.id.list); 

    adapter = new CustomListAdapter(this, movieList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(this); 
    // Showing progress dialog before making http request 
    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    // changing action bar color 
    getActionBar().setBackgroundDrawable(
      new ColorDrawable(Color.parseColor("#1b1b1b"))); 

    // Creating volley request obj 
    JsonArrayRequest movieReq = new JsonArrayRequest(url ,new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        hidePDialog(); 


        // Parsing json 
        for (int i = 0; i < response.length(); i++) { 
         try { 

          JSONObject obj = response.getJSONObject(i).getJSONObject(TAG_MOVIE); 
          Movie movie = new Movie(); 
          movie.setTitle(obj.getString("title")); 
          movie.setThumbnailUrl(obj.getString("image")); 
          movie.setRating(((Number) obj.get("rating")) 
           .doubleValue()); 
          movie.setYear(obj.getInt("releaseYear")); 

          //Genre is json array 
          JSONArray genreArry = obj.getJSONArray("genre"); 
          ArrayList<String> genre = new ArrayList<String>(); 
          for (int j = 0; j < genreArry.length(); j++) { 
           genre.add((String) genreArry.get(j)); 
          } 
          movie.setGenre(genre); 

          // adding movie to movies array 
          movieList.add(movie); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 

        // notifying list adapter about data changes 
        // so that it renders the list view with updated data 
        adapter.notifyDataSetChanged(); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 
        hidePDialog(); 

       } 
      }); 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(movieReq); 





} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    hidePDialog(); 
} 

private void hidePDialog() { 
    if (pDialog != null) { 
     pDialog.dismiss(); 
     pDialog = null; 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

}

но результат только белый макет. Я думаю, это потому, что мой код не находит переменную «Filme» в JSON, но я не знаю, как ее исправить.

любая идея ??

спасибо !!

+0

Я использую уже JsonArrayRequest. –

ответ

0

«Filme» не является JSONObject, это на самом деле JSONArray. Просто разобрать его как JSONArray :-)

EDIT:

Прежде всего, используйте StringRequest, не JSONArray, как корень того, что вы получаете НЕ JSONArray.

А потом, когда у вас есть простая строка, как результат, сделать что-то вроде этого:

 JSONObject root = new JSONObject(result); 
     JSONArray films = root.getJSONArray("Filme"); 
     JSONObject obj; 
     for (int i = 0; i < films.length(); i++) { 
      obj = films.getJSONObject(i); 

      //Put all the parsing for a single Movie JSONObject here 
     } 
+0

Спасибо за ваш ответ. Как я могу сделать это с помощью залпа? –

+0

JSONArray jsonArrayFilme = (ваш json) .getJSONArray («Filme»); –

+0

Вы имеете в виду, как это ?? // Парсинг json for (int i = 0; i Filme = new ArrayList (); for (int j = 0; j

0

Вот решение, что я сделал с помощью «Kelevandos». Может быть, это может помочь кому-то.

// Request a string response from the provided URL. 
StringRequest movieReq = new StringRequest(Request.Method.GET, url, 
new Response.Listener<String>() { 
@Override 
public void onResponse(String response) { 
//Log.d(TAG, response.toString()); 
hidePDialog(); 

JSONObject root; 
try { 
root = new JSONObject(response); 
JSONArray films = root.getJSONArray("Filme"); 
JSONObject obj; 
for (int i = 0; i < films.length(); i++) { 
obj = films.getJSONObject(i); 

//Put all the parsing for a single Movie JSONObject here 

Movie movie = new Movie(); 
movie.setTitle(obj.getString("title")); 
movie.setThumbnailUrl(obj.getString("image")); 
movie.setRating(((Number) obj.get("rating")) 
.doubleValue()); 
movie.setYear(obj.getInt("releaseYear")); 

// Genre is json array 
JSONArray genreArry = obj.getJSONArray("genre"); 
ArrayList<String> genre = new ArrayList<String>(); 
for (int j = 0; j < genreArry.length(); j++) { 
genre.add((String) genreArry.get(j)); 
} 
movie.setGenre(genre); 

// adding movie to movies array 
movieList.add(movie); 
+0

Еще один думаю. Что если мой JSON будет таким: {«Ошибка»: «», «Filme»: [{«title»: «Рассвет планеты обезьян», «образ»: «api.androidhive.info/json/movies /1.jpg ";," rating ": 8.3," releaseYear ": 2014," Langtext ":" fdfdfd

fdfggfg ", ... ...}]}" Langtext "имеют некоторые, как HTML. Что я могу сделать? –

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