1

JSON適切なパラメーターでサーバーにアクセスしたときに応答が得られるアプリケーションを開発しています。さて、これらのデータを解析して に保存する必要がありarraylistます。ここまでは完了しましたが、データを解析して に保存する必要がarrayありJSONObjectます。これが私が言おうとしていることです: 以下はJSON response私が得ているものです:

{"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異なる値を持つパラメータが表示されます。ieに従って個別に解析し、さらに処理するために に保存する必要があります。resposne を取得し、それをさまざまな変数に格納するために私が行っていることは次のとおりです。"giftcard""miles"JSONObjectrewardTypearraylist

@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();
        }

あらゆる種類の助けをいただければ幸いです。

4

3 に答える 3

0

JSON から読み取ったデータをカプセル化するオブジェクトを作成してみませんか。いいえ:

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.

}

次に、これらの Reward オブジェクトの配列リストを作成して、操作を少し簡単にすることができます。報酬がギフトカードかどうかを確認するメソッドを追加することもできます。

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

この時点で、Rohit が提案したことを実行して、それがギフトカードの場合にのみリストに追加できます。最後に、まだすべてのオブジェクトが必要で、それらをグループ化するための論理的な方法を探しているだけの場合は、HashMap> を試してみてください。ここで、キーは報酬タイプであり、値は、ギフトカードであるすべての報酬を入れるリストです。 () は真です。

于 2013-04-15T13:44:30.320 に答える
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
于 2013-04-15T12:17:37.153 に答える