2013-06-25 49 views
2

我希望許多開發人員已經與這一點,他們中的一些也進行了更改工作,所以在這裏我們去:從JSON數據檢索到列表視圖

我試圖讓多級列表視圖使用JSON,並使用此教程客戶端編碼:

http://www.androidhive.info/2012/10/android-multilevel-listview-tutorial/

我能夠獲得使用該JSON相冊列表:

[ 
{ 
"id":1, 
"name":"127 Hours", 
"songs_count":14 
}, 
{ 
"id":2, 
"name":"Adele 21", 
"songs_count":11 
} 
] 

根據該專輯

沒有得到歌曲的列表,並獲得我試圖2種JSON的

第一本歌曲列表:

{ 
"id":1, 
"album":"127 Hours", 
"songs": 
[ 
{ 
"id":1, 
"name":"Never Hear Surf Music Again", 
"duration":"5:52" 
}, 
{ 
"id":2, 
"name":"The Canyon", 
"duration":"3:01" 
} 
], 
"id":2, 
"album":"Adele 21", 
"songs": 
[ 
{ 
"id":1, 
"name":"Rolling In The Deep", 
"duration":"03:48" 
} 
] 
} 

第二個:

注意:我想使用相同的代碼來製作相同種類的多級別ListView,但僅使用JSON,不能使用PHP類或只能使用單個JSON來顯示專輯和歌曲,如果可能的話,請寫一個JSON對我..

+0

我們可以有,你有編碼解析此JSON的解析代碼。 – Aarun

+0

相同的代碼,寫在教程,沒什麼不同@Aarun – Sun

+0

@AbrahimNeil:你能分享你的java代碼..你做了什麼解析這個JSON和你試圖爲你的功能... –

回答

1

嘗試以下:

JSON解析器類:

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // constructor 
    public JSONParser() { 

    } 

    // function get json from url 
    // by making HTTP POST or GET mehtod 
    public JSONObject makeHttpRequest(String url, String method, 
      List<NameValuePair> params) { 

     // Making HTTP request 
     try { 

      // check for request method 
      if (method == "POST") { 
       // request method is POST 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      } else if (method == "GET") { 
       // request method is GET 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       String paramString = URLEncodedUtils.format(params, "utf-8"); 
       url += "?" + paramString; 
       HttpGet httpGet = new HttpGet(url); 

       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      } 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 

片段類顯示列表視圖:

public static class EventFragment extends ListFragment { 

     ArrayList<HashMap<String, String>> eventsList; 
     private String url_all_events = //url goes here; 
     private ProgressDialog pDialog; 

     JSONParser jParser = new JSONParser(); 

     // JSON Node names 
     private static final String CONNECTION_STATUS = "success"; 
     private static final String TABLE_EVENT = "Event"; 
     private static final String pid = "pid"; 
     private static final String COL_GROUP = "Group"; 
     private static final String COL_NAME = "Event_Name"; 
     private static final String COL_DESC = "Event_Desc"; 
     private static final String COL_DATE = "Event_Date"; 
     private static final String COL_TIME = "Event_Time"; 

     JSONArray Events = null; 

     public static final String ARG_SECTION_NUMBER = "section_number"; 

     public EventFragment() { 
     } 

     public void onStart() { 
      super.onStart(); 

      eventsList = new ArrayList<HashMap<String, String>>(); 
      new LoadAllEvents().execute(); 

      // selecting single ListView item 
      ListView lv = getListView(); 

      // Lauching the Event details screen on selecting a single event 
      lv.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // getting values from selected ListItem 
        String ID = ((TextView) view.findViewById(R.id.pid)) 
          .getText().toString(); 

        Intent intent = new Intent(view.getContext(), 
          EventDetails.class); 
        intent.putExtra(pid, ID); 
        view.getContext().startActivity(intent); 
       } 
      }); 
     } 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_events, 
        container, false); 

      return rootView; 
     } 

     class LoadAllEvents extends AsyncTask<String, String, String> { 

      /** 
      * Before starting background thread Show Progress Dialog 
      * */ 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       pDialog = new ProgressDialog(getActivity()); 
       pDialog.setMessage("Just a moment..."); 
       pDialog.setIndeterminate(true); 
       pDialog.setCancelable(true); 
       pDialog.show(); 
      } 

      protected String doInBackground(String... args) { 
       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       // getting JSON string from URL 
       JSONObject json = jParser.makeHttpRequest(url_all_events, 
         "GET", params); 

       try { 
        // Checking for SUCCESS TAG 
        int success = json.getInt(CONNECTION_STATUS); 

        if (success == 1) { 
         // products found 
         // Getting Array of Products 
         Events = json.getJSONArray(TABLE_EVENT); 
         // looping through All Contacts 
         for (int i = 0; i < Events.length(); i++) { 
          JSONObject evt = Events.getJSONObject(i); 

          // Storing each json item in variable 
          id = evt.getString(pid); 
          group = evt.getString(COL_GROUP); 
          name = evt.getString(COL_NAME); 
          desc = evt.getString(COL_DESC); 
          date = evt.getString(COL_DATE); 
          time = evt.getString(COL_TIME); 

          // creating new HashMap 
          HashMap<String, String> map = new HashMap<String, String>(); 

          // adding each child node to HashMap key => value 
          map.put(pid, id); 
          map.put(COL_GROUP, group); 
          map.put(COL_NAME, name); 
          map.put(COL_DESC, desc); 
          map.put(COL_DATE, date); 
          map.put(COL_TIME, time); 

          // adding HashList to ArrayList 
          eventsList.add(map); 
         } 
        } else { 
         // Options are not available or server is down. 
         // Dismiss the loading dialog and display an alert 
         // onPostExecute 
         pDialog.dismiss(); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       return null; 
      } 

      protected void onPostExecute(String file_url) { 
       // dismiss the dialog after getting all products 
       pDialog.dismiss(); 
       // updating UI from Background Thread 
       getActivity().runOnUiThread(new Runnable() { 
        public void run() { 
         ListAdapter adapter = new SimpleAdapter(getActivity(), 
           eventsList, R.layout.list_item, new String[] { 
             pid, COL_GROUP, COL_NAME, COL_DATE, COL_TIME }, 
           new int[] { R.id.pid, R.id.group, R.id.name, R.id.header, 
             R.id.title2 }); 

         setListAdapter(adapter); 
        } 
       }); 

      } 

     } 
    } 

活動的詳細信息類:

public class EventDetails extends Activity { 

    String pid; 
    TextView EvtName, EvtDesc, EvtDate, EvtTime, Header; 
    ImageView logo; 

    private String url_event_details = "http://centrubook.eu.pn/eventDetails.php"; 
    private ProgressDialog pDialog; 

    JSONParser jParser = new JSONParser(); 

    // JSON Node names 
    private static final String CONNECTION_STATUS = "success"; 
    private static final String TABLE_EVENT = "Event"; 
    private static final String COL_PID = "pid"; 
    private static final String COL_NAME = "Event_Name"; 
    private static final String COL_DESC = "Event_Desc"; 
    private static final String COL_DATE = "Event_Date"; 
    private static final String COL_TIME = "Event_Time"; 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.eventdetails); 

     // ActionBar actionBar = getActionBar(); 
     // actionBar.setDisplayHomeAsUpEnabled(true); 

     EvtName = (TextView) findViewById(R.id.BombaName); 
     EvtDesc = (TextView) findViewById(R.id.BombaDesc); 
     EvtDate = (TextView) findViewById(R.id.BombaDate); 
     EvtTime = (TextView) findViewById(R.id.BombaTime); 
     logo = (ImageView) findViewById(R.id.BombaLogo); 

     Intent i = getIntent(); 
     pid = i.getStringExtra(COL_PID); 
     new getEventDetails().execute(); 
    } 

    class getEventDetails extends AsyncTask<String, String, String> { 

     String name, desc, date, time; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(EventDetails.this); 
      pDialog.setMessage("Just a moment..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... args) { 

      // Check for success tag 
      int success; 
      try { 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("pid", pid)); 

       // getting product details by making HTTP request 
       // Note that product details url will use GET request 
       JSONObject json = jParser.makeHttpRequest(url_event_details, 
         "GET", params); 

       // json success tag 
       success = json.getInt(CONNECTION_STATUS); 
       if (success == 1) { 
        // successfully received product details 
        JSONArray eventsObj = json.getJSONArray(TABLE_EVENT); 

        // get first product object from JSON Array 
        JSONObject details = eventsObj.getJSONObject(0); 

        name = details.getString(COL_NAME); 
        desc = details.getString(COL_DESC); 
        date = details.getString(COL_DATE); 
        time = details.getString(COL_TIME); 

       } else { 
        // product with pid not found 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     protected void onPostExecute(final String file_url) { 
      pDialog.dismiss(); 

      runOnUiThread(new Runnable() { 
       public void run() { 

        EvtName.setText(name); 
        EvtDesc.setText(desc); 
        EvtDate.setText(date); 
        EvtTime.setText(time); 
        logo.setImageResource(R.drawable.events); 

       } 
      }); 
     } 
    } 
} 
相關問題