2016-07-28 58 views
0

即時消息試圖做的是看看json拉所有名稱到列表視圖(保存該名稱的imdbid),並從那裏你可以點擊一個電影,它會去一個新的意圖,將帶給你電影,你與它的名稱總結和圖像點擊如果我有一個jsonarray,我顯示它在列表視圖,並希望從列表specifec項目如何做到這一點?

IM的JSON在一個數組,看起來像這樣搜索(它根據用戶搜索的內容,所以這是一個例子......)

{"Search":[{"Title":"Batman  Begins","Year":"2005","imdbID":"tt0372784","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3._V1_SX300.jpg"},{"Title":"Batman v Superman: Dawn of Justice","Year":"2016","imdbID":"tt2975590","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"},{"Title":"Batman","Year":"1989","imdbID":"tt0096895","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BMTYwNjAyODIyMF5BMl5BanBnXkFtZTYwNDMwMDk2._V1_SX300.jpg"},{"Title":"Batman Returns","Year":"1992","imdbID":"tt0103776","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]_V1_SX300.jpg"},{"Title":"Batman Forever","Year":"1995","imdbID":"tt0112462","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/MV5BNWY3M2I0YzIt[email protected]._V1_SX300.jpg"},{"Title":"Batman & Robin","Year":"1997","imdbID":"tt0118688","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"},{"Title":"Batman: The Animated Series","Year":"1992–1995","imdbID":"tt0103359","Type":"series","Poster":"http://ia.media-imdb.com/images/M/MV5BMTU3MjcwNzY3NF5BMl5BanBnXkFtZTYwNzA2MTI5._V1_SX300.jpg"},{"Title":"Batman: Under the Red Hood","Year":"2010","imdbID":"tt1569923","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"},{"Title":"Batman: The Dark Knight Returns, Part 1","Year":"2012","imdbID":"tt2313197","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"},{"Title":"Batman: Mask of the Phantasm","Year":"1993","imdbID":"tt0106364","Type":"movie","Poster":"http://ia.media-imdb.com/images/M/[email protected]@._V1_SX300.jpg"}],"totalResults":"310","Response":"True"} 

所以我想要做的是獲得imdbid,當他點擊包含電影名稱的列表視圖 這是我試過的:

JSONObject jsonObject = new JSONObject(finalJson); 
      JSONArray parentArray = jsonObject.getJSONArray("Search"); 
      StringBuffer finalStringBuffer = new StringBuffer(); 
      String imdbid ; 
      for (int i=0; i<parentArray.length(); i++){ 
       JSONObject finalJsonObject = parentArray.getJSONObject(i); 
       String movieName = finalJsonObject.getString("Title"); 
       nameOfMovie.add(movieName); 
       String year = finalJsonObject.getString("Year"); 
       yearOfMovie.add(year); 
       String omdbID = finalJsonObject.getString("imdbID"); 
       id.add(omdbID); 
       finalStringBuffer.append(movieName + " , " + year + " , " + omdbID + "\n"); 
       imdbid = omdbID ; 
      } 

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

    } 

但我怎麼知道他cliked上的imdbid(這是在列表中顯示的電影名稱)?
列表視圖代碼:

listViewInternetScreen.setClickable(true); 
    listViewInternetScreen.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long i) { 
      Intent intenttoEditScreen=new Intent(AddFromInternet.this, EditMovie.class); 
      setResult(RESULT_OK,intenttoEditScreen); 
      String jsonMovieName = String.valueOf(nameOfMovie); 
      String jsonMovieSummery = String.valueOf(yearOfMovie); 
      String jsonImageURL = String.valueOf(id); 

      intenttoEditScreen.putExtra("json", jsonMovieName); 
      intenttoEditScreen.putExtra("json", jsonMovieSummery); 
      intenttoEditScreen.putExtra("json", jsonImageURL); 
      startActivity(intenttoEditScreen); 


     } 

     }); 

和搜索方法:

 btnGo = (Button) findViewById(R.id.btnGo); 
    assert btnGo != null; 
    btnGo.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      //MAKE A SEARCH STRING AND PARSE THE RESULT 
      final String search = "http://www.omdbapi.com/?s=" + EtSearch.getText().toString(); 
      Log.e("JSON", search); 
      new JSONParser().execute(search); 
      ArrayList<String> list = new ArrayList<>(nameOfMovie); 
      arrayAdapter = new ArrayAdapter<>(AddFromInternet.this, 
        android.R.layout.simple_list_item_1, list); 
      arrayAdapter.notifyDataSetChanged(); 
      listViewInternetScreen.setAdapter(arrayAdapter); 
      Log.e("JSON MOVIE", String.valueOf(nameOfMovie)); 

     } 
    }); 

感謝您的幫助:d

回答

0

步驟1:使用GSON(和改造,如果你想)到簡化將JSON字符串轉換爲Java對象列表

第2步:製作一個自定義的ArrayAdapter來加載這個對象列表。然後,當您添加一個項目時單擊偵聽器,您可以從您單擊的列表項中獲取該對象,然後啓動用於顯示該電影的完整信息的意圖。

額外的步驟將是使影片對象Parcelable,所以你可以在一個線路的對象添加到意圖,而不是每個單獨的領域它包含

+0

感謝會盡量生病時回家 但只是一個快速關於gson的qustion,如果我使用它,我不需要:JSONObject finalJsonObject = parentArray.getJSONObject(i); 但只是放入字符串和它的數組類型的gson方法? – rollcage

+0

一旦你把JSON扔到下面的鏈接,並檢查Gson等選項,那麼你使用Gson來生成Java對象,並且你將擁有一個Arraylist而不是那條線。您不再需要手動解析出JSON數組。 Gson文檔有很多有用的例子。 http://www.jsonschema2pojo.org –

+0

這裏可以看到一個改進的例子。 https://github.com/santhoshvai/omdb-android-client –

相關問題