0

Json string があります。

アプリを開いて使用するたびに 1 つのエントリを取得したいと考えています。ネットで検索すると、こんなのができました。

ArrayList<HashMap<String, String>> Listads = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> mapads = new HashMap<String, String>();
        String randomValue = null;
        try {
            for (adsTrend tr : objs.getTrends())

            {

                Log.i("ADS",
                        tr.getId() + " - " + tr.getLink() + " - "
                                + tr.getType() + " - " + tr.getEnabled());

                lv_arr[i] = tr.getId() + " - " + tr.getLink() + " - "
                        + tr.getType() + " - " + tr.getEnabled();
                i++;

                mapads.put("id", tr.getId());
                mapads.put("link", tr.getLink());
                mapads.put("type", tr.getType());
                mapads.put("enabled", tr.getEnabled());

                Listads.add(mapads);
                Random generator = new Random();
                Object[] values = mapads.values().toArray();
                randomValue = (String) values[generator.nextInt(values.length)];

            }



            Toast.makeText(SplashActivity.this,"this is my random value : "+randomValue,Toast.LENGTH_LONG).show();
4

3 に答える 3

2

ランダムに選択したすべての内部JSONオブジェクトに同じ文字列 (有効化とタイプ) が含まれていると仮定すると、ランダムなオブジェクトを選択するのは簡単です。JSONArrayいくつかの internal を持つネストされた がありJSONObjectます。

(1)JSONObject初期対応の作成

JSONObject response = new JSONObject(serverResponse);

(2) トレンド配列を抽出する

JSONArray trends = response.getJSONArray("trends");

(3) トレンド配列のサイズを取得する

int trendsSize = trends.length();

(4) 0 と配列サイズ - 1 の間のランダムなインデックスを選択します (0 が含まれているため)

Random r = new Random();
int randomObjectIndex = r.nextInt(trendsSize-0) + 0;

trendSize (その数は含まれないため、実質的な trendSize-1 になります) および 0 で囲まれた数値を選択する必要があります。

(5) その場所にあるオブジェクトを取得する

JSONObject selectedRandomObject = trends.getJSONObject(randomObjectIndex);

(6) 必要な文字列を抽出する

String type = selectedRandomObject.getString("type");

探している文字列がそこにある限り、JSONException を受け取るべきではありません

于 2013-04-16T13:01:56.673 に答える
1

このようにしてみてください

JSONObject jsonObj = new JSONObject(jsonStr); 

// using JSONArray to grab the trendsfrom under popop 
 JSONArray menuitemArr = popupObject.getJSONArray("trends");  

// lets loop through the JSONArray and get all the items 
for (int i = 0; i < menuitemArr.length(); i++) { 
   // printing the values to the logcat 
      Log.v(menuitemArr.getJSONObject(i).getString("_id").toString()); 
      Log.v(menuitemArr.getJSONObject(i).getString("_link").toString()); 
      Log.v(menuitemArr.getJSONObject(i).getString("Enabled").toString()); 
} 
于 2013-04-16T13:00:29.857 に答える
-1

これをあなたのコードと組み合わせる:

ArrayList<HashMap<String, String>> Listads = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> mapads = new HashMap<String, String>();
        String randomValue = null;
        try {
            for (adsTrend tr : objs.getTrends())

            {

                Log.i("ADS",
                        tr.getId() + " - " + tr.getLink() + " - "
                                + tr.getType() + " - " + tr.getEnabled());

                lv_arr[i] = tr.getId() + " - " + tr.getLink() + " - "
                        + tr.getType() + " - " + tr.getEnabled();
                i++;

                mapads.put("id", tr.getId());
                mapads.put("link", tr.getLink());
                mapads.put("type", tr.getType());
                mapads.put("enabled", tr.getEnabled());

                Listads.add(mapads);
                Collections.shuffle(Listads);
                Listadds.get(0);

                Log.i("ADS",
                        tr.getId() + " - " + tr.getLink() + " - "
                                + tr.getType() + " - " + tr.getEnabled());
于 2013-04-16T12:58:42.520 に答える