2013-04-15 21 views
1

我正在开发一个应用程序,当我用合适的参数击中服务器时,得到的响应为JSON。现在,我必须解析这些数据并将其存储在arraylist中,我完成了这里,但现在我必须根据JSONObject解析数据并存储在array中。这是我想说的:以下是我得到的JSON response将JSON响应的值存储在arraylist中,然后根据JSONObject输出对其进行过滤

{"rewards":[ 
{ 
"rewardID":"2", 
"rewardType":"giftcard", 
"rewardTitle":"$5 Starbucks Gift Card" 
}, 
{ 
"rewardID":"3", 
"rewardType":"giftcard", 
"rewardTitle":"$5 Target Gift Card" 
}, 
{ 
"rewardID":"24", 
"rewardType":"miles", 
"rewardTitle":"100 AmericanAirlines Advantage Miles" 
}, 
{ 
"rewardID":"25", 
"rewardType":"miles", 
"rewardTitle":"100 US Airways Dividend Miles" 
} 
] 
} 

你可以看到rewardType参数已经得到了不同的价值观像"giftcard""miles"。我必须分别根据JSONObject,即rewardType进行解析,并将其存储在arraylist中作进一步处理。 下面是我在做什么了越来越resposne并将其存储在不同的变量:

@Override 
    protected String doInBackground(String... args) { 
     HttpParams params = new BasicHttpParams(); 
     params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, 
       HttpVersion.HTTP_1_1); 
     HttpClient httpClient = new DefaultHttpClient(params); 
     HttpPost post = new HttpPost(
       "API HERE"); 

     post.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

     try { 
      post.setEntity(new StringEntity("client_id=" + client_id + "&" 
        + "client_secret=" + clientSecretKey, HTTP.UTF_8)); 

      HttpResponse response = httpClient.execute(post); 
      int i = response.getStatusLine().getStatusCode(); 
      System.out.println("HTTP Post status: " 
        + i); 

      BufferedReader in = new BufferedReader(new InputStreamReader(
        response.getEntity().getContent())); 

      // SB to make a string out of the inputstream 
      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 

      // the json string is stored here 
      String result = sb.toString(); 
      System.out.println("Result Body: " + result); 
      return result; 

     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     JSONObject jObject; 
     try { 
      jObject = new JSONObject(result); 

      JSONArray jSearchData = jObject.getJSONArray("rewards"); 

      for (int i = 0; i < jSearchData.length(); i++) { 

       JSONObject objJson = jSearchData.getJSONObject(i); 

       rewardID = objJson.getString("rewardID"); 
       rewardType = objJson.getString("rewardType"); 
       rewardTitle = objJson.getString("rewardTitle"); 

        if (rewardType == "giftcard") { 
        System.out.println("Reward ID: " + rewardID); 
        System.out.println("Reward Type: " + rewardType); 
        System.out.println("Reward Tittle: " + rewardTitle); 
        System.out.println("Reward ImageFileName: " 
          + rewardImageFilename); 
        System.out.println("Reward Price: " + rewardPrice); 
       } 

      } 

     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

任何形式的帮助将不胜感激。

+0

现在你想要做 – Rohit

+0

见我对你的答案评论什么。 – Anupam

+0

正如你所说我在做'rewardType ==“giftcard”'但是'if'语句里面没有打印任何内容。在'if'外面,我可以打印所有内容。如何只过滤那些有'rewardType = giftcard'作为回应的数据。 – Anupam

回答

1

用途:

如果(rewardType.equals( “礼金券”))

+0

谢谢你的队友,这个作品。 – Anupam

0

如果你从一个URL获取这个数据,那么这个

 HttpGet httpGet = new HttpGet(url); 
     HttpResponse httpResponse = httpClient.execute(httpGet); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
        inputstream = httpEntity.getContent(); 
        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(); 

否则

    try { 

     json = (your full data convert into string).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()); 
    } 



      rewards = jObj.getJSONArray("rewards"); 

     // looping through All 
     for (int i = 0; i < rewards.length(); i++) { 
      JSONObject c = rewards.getJSONObject(i); 

      // Storing each json item in variable 

      rewardID = c.getString("rewardID"); 
      rewardTitle = c.getString("rewardTitle"); 


      // adding all get values into array 
      if (rewardID != "null" && rewardTitle != "null") { 
      //add your data values into list and then filter 
       array1.add(rewardID); 
       array2.add(rewardTitle); 


      } 

     } 

编辑

ArrayList<String> array1 = new ArrayList<String>(); 
ArrayList<String> array2 = new ArrayList<String>(); 
    ArrayList<String> array3 = new ArrayList<String>(); 
    if (rewardType=="giftcard") { 
     array1.add(rewardID); 
     array2.add(rewardTitle); 
     array2.add(rewardType); 
     } 

    show in which activity you want to show 
+0

我只能用'rewardType = giftcard'在活动中显示数据,其余部分完成。 – Anupam

+0

正如你所看到的,我在回复中有四个数据,其中有'rewardType = giftcard',两个有'rewardType = miles'。我只想在我的活动中显示具有'rewardType = giftcard'的数据。你能告诉我该怎么做吗? – Anupam

+0

简单,如果条件检查rewardType == giftcard然后添加数组列表中的整个事物或罪行物品,然后显示在您的活动 – Rohit

0

你为什么不创建一个对象来封装从JSON读取数据。 IE:

public final class Reward { 
    private static final String REWARD_TYPE_GIFTCARD = "giftcard"; 
    private final int mRewardId; 
    private final String mRewardType; 
    private final String mRewardTitle; 

public Reward(final int rewardId, final String rewardType, final String rewardTitle){ 
    mRewardId = rewardId; 
    mRewardType = rewardType; 
    mRewardTitle = rewardTitle; 
} 
// Implement getter methods here. 

}

然后,您可以有这些奖励的对象,这将让他们稍微更容易使用的一个数组列表。你甚至可以添加一个检查,如果奖励是礼金券的方法:

public boolean isGiftcard() { 
    return REWARD_TYPE_GIFTCARD.equals(mRewardType); 
} 

此时你能做什么罗希特建议,只有它,如果它是一个礼金券添加到列表中。最后,如果你仍然需要所有的对象,而你只是在寻找一种合乎逻辑的方式来组合它们,那么尝试一下HashMap>,其中键是奖励类型,并且该值是一个列表,您可以将所有奖励都设置为Giftcard ()对于。

+0

你能告诉我如何使用不同的课程来实现这一点。我已经发布了我的代码,无论我为此做了什么,只是过滤不会发生在我身上。 – Anupam

+0

既然你接受了另外一个答案,那么我会假设你全部都已经设定好了吗?我的回答确实只能帮助你清理代码(我想我不明白你的实际问题)。 – natez0r

相关问题