2014-11-06 98 views
0

我正在使用包含消息和時間標記的pubnub獲取我的歷史記錄的應用程序。原始的JSON字符串是如下:Json在列表視圖中解析Android

[[{"message":"hdjcjcjjckckckckvkckckck","timetoken":14151866297757284},{"message":"ufjfjfjcjfjchfjdhwjroritkgjcj","timetoken":14151869212145693},{"message":"qMobile","timetoken":141526}],14151866297757284,141526] 

使用下面的方法後,我有得到以下JSON字符串中的JSONObject℃。

{"message":"hdjcjcjjckckckckvkckckck","timetoken":14151866297757284} 


pubnub.history(channel, true, 100, new Callback() { 
          @Override 
          public void successCallback(String channel, 
                 Object message) { 
           notifyUser("HISTORY : " + message); 

           Log.i("Received msg : ", message.toString()); //<==== receiving Messages here 


           try { 

           JSONArray jsonObj = new JSONArray(message.toString()); 
           JSONArray jArray = new JSONArray(jsonObj.get(0).toString()); 
           for (int i = 0; i < jArray.length(); i++) { 

            JSONObject c = jArray.getJSONObject(i); 

            String messageString=c.getString("message"); 
            String timeString=c.getString("timetoken"); 
            String abc = timeString; 

           } 

          } 

現在我只想在ListView控件來顯示我的每一個JSON對象,這樣

消息:dsfdsvsfvdfvfdvdvgd
timetoken:14132423414141
消息:dsfwfwefwedcsfsw
timetoken:21431353153252
消息:dthfjtyhnfgvb
timetoken:68624526246

在此先感謝。

+1

然後實現ListAdapter並顯示它。 – 2014-11-06 10:19:19

+0

@普拉特感謝您的回覆。你能爲此提供一些代碼片段嗎?因爲我沒有得到ListAdapter技術。 – 2014-11-06 10:20:46

+0

爲什麼你不是Gson api ..試試它很容易 – DJhon 2014-11-06 10:23:17

回答

1

聲明一個HashMap中的ArrayList中象下面這樣:

ArrayList<HashMap<String,String>> data= new ArrayList<HashMap<String,String>>(); 
HashMap<String,String> jsonData; 
private EfficientAdapter adapter; 

//In your onCreate() method, just initialize your adapter. 
adapter = new EfficientAdapter(this); 

現在,這裏面for循環:

for (int i = 0; i < jArray.length(); i++) { 
    jsonData=new HashMap<String,String>(); 
    JSONObject c = jArray.getJSONObject(i); 

    String messageString=c.getString("message"); 
    String timeString=c.getString("timetoken"); 
    String abc = timeString; 

    jsonData.put("message",messageString); 
    jsonData.put("timeStamp",timeString); 

    data.add(jsonData); 
} 

YOURLISTVIEW.setAdapter(adapter); 

//名單適配器代碼:

private class EfficientAdapter extends BaseAdapter { 

     private LayoutInflater mInflater; 
     private Context context; 

     public EfficientAdapter(Context context) { 
      mInflater = LayoutInflater.from(context); 
      this.context = context; 
     } 

     @Override 
     public int getCount() { 
      return data.size(); 
     } 

     @Override 
     public Object getItem(int arg0) { 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 

      final ViewHolder holder; 

      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.YOUR LAYOUT FILE TO SHOW MESSAGE AND TIME, null); 
       //Just create one xml in layout folder and give that layout file name like R.layout.list_item. 
       holder = new ViewHolder(); 
       holder.txtMessage = (TextView) convertView.findViewById(R.id.txtMessage); 
       holder.txtTimestamp = (TextView) convertView.findViewById(R.id.txtTimestamp); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      holder.txtMessage.setText(data.get(position).get("message")); 
      holder.txtTimestamp.setText(data.get(position).get("timeStamp")); 

      convertView.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        //your list click event here 
       } 
      }); 

      return convertView; 
     } 

     class ViewHolder { 
      TextView txtMessage; 
      TextView txtTimestamp; 
     } 

    } 
+1

感謝@pratt的詳細回覆。我正在使用上面的代碼片斷。我只需要知道下面的代碼:for(int i = 0; i (); JSONObject c = jArray.getJSONObject(i); String messageString = c.getString(「message」); String timeString = c。的GetString( 「timetoken」); jsonData.put(「message」,messageString); jsonData.put(「timeStamp」,timeString); ();} data.add //我們在更新適配器值的位置,從上面的代碼我們只是做它,但不傳遞值。 – 2014-11-06 12:02:02

+0

你會得到它,我們將所有的json數據添加到名爲「data」的數組中,這樣你就可以在Adapter中獲得這些數據,用你現有的Activity創建Adapter類,而不像2nd類。 – 2014-11-06 12:10:11

0

更好的選擇是要使用GSON,它將在未來通過json解析節省您的時間。

  1. 下載GSON並將其添加到您的項目http://search.maven.org/#artifactdetails%7Ccom.google.code.gson%7Cgson%7C2.3%7Cjar
  2. 粘貼您的JSON - http://www.jsonschema2pojo.org/,並作出一個java類表示。
  3. 使用您的JSON字符串(或閱讀器),您所創建的類(在第2點),並獲得具有所有的JSON有值的對象 -

    GSON GSON =新GSON(); yourObject = gson.fromJson(yourJsonString,yourObject.class);

    1. 然後在適配器中使用此對象。例如 - message = yourObject.get(position).getMessage();