2015-10-13 46 views
0

我正在尋找一個解決方案,但我無法解決它。Json解析器與排球庫

這就是我的JSON

{ 「錯誤」: 「」, 「Filme」:[{ 「稱號」: 「猩球黎明」, 「形象」: 「http://api.androidhive.info/json/movies/1.jpg」, 「等級」:8.3, 「releaseYear」:2014, 「流派」:[ 「行動」, 「戲劇」, 「科幻」] }, { 「標題」: 「區9」, 「 image:「http://api.androidhive.info/json/movies/2.jpg」, 「rating」:8, 「releaseYear」:2009, 「genre」:[「Action」,「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; 
} 

}

,但結果只有一個白色的佈局。我認爲這是因爲我的代碼沒有在JSON中找到「Filme」變量,但我不知道如何解決它。

任何想法?

謝謝!

+0

我已經使用JsonArrayRequest。 –

回答

0

「Filme」不是JSONObject,它實際上是JSONArray。簡單地分析它作爲一個JSONArray :-)

編輯:

首先,使用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

你的意思是這樣? (int i = 0; i Filme = new ArrayList ();對於(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是這樣的:{「Error」:「」,「Filme」:[{「title」:「猿星球的黎明」,「image」:「api.androidhive.info/json/movies /1.jpg「;」rating「:8.3,」releaseYear「:2014,」Langtext「:」fdfdfd

fdfggfg「,... ...}]}」Langtext「有一些類似HTML的內容。我能做什麼? –