2013-04-16 4 views
0

У меня есть строка Json.Получить случайный элемент из Json String

Я хотел бы получить одну запись каждый раз, когда открываю приложение и использую его. Поиск в сети, я создал что-то вроде этого:

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(); 
+0

Каков ваш вопрос? С чем вы боретесь? В чем твоя проблема? –

+0

Я хочу получить случайную одну запись моей строки, а затем получить идентификатор, ссылку и т. Д. Этой записи, чтобы сделать действие. Например, я бы создал webView со ссылкой –

+0

Ваша новая ошибка поступает в SplashActivity, на line 196. Что здесь? –

ответ

2

Предполагая, что все ваши внутренние JSON объектов, вы произвольно выбираете одни и те же строки (т. е. включаете и вводите), выбор случайного объекта очень просто. У вас есть вложенный JSONArray, который имеет некоторое количество внутренних 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 (это число не будет включен, так что effectivly trendSize-1) и 0

(5) Получить объект в этом месте

JSONObject selectedRandomObject = trends.getJSONObject(randomObjectIndex); 

(6) Извлечение строки, которые вы хотите

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

пока строки вы ищете там, вы не должны получить JSON Исключение

+0

Мне нужно создать объект JSON в инструкции for for? –

+0

в моем примере ваша строка - «serverResponse». Если вы подаете JSONObject строку, она создаст объект из этой строки. Это первый шаг - остальные просто распаковывают остальную часть данных. – Rarw

+0

строка, которую я получаю, поступает из файла JSON на моем сервере. Я должен поместить мою ссылку как «serverResponce»? –

-1

Сочетание this с кодом:

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()); 
+0

этот путь возвращает мне ошибку (см. Мое редактирование) –

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()); 
} 
Смежные вопросы