2013-04-16 70 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

我想隨機獲取我的字符串中的一個條目,然後獲取此條目的id,鏈接等,以便執行操作。例如,我將創建一個帶有鏈接的webView –

+0

您的新錯誤即將發生在SplashActivity中第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界定的號碼(該號碼將不被包括在內,以便它是用途不同trendSize-1)和0

(5)獲取所述對象在該位置

JSONObject selectedRandomObject = trends.getJSONObject(randomObjectIndex); 

(6)提取您想

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

只要你正在尋找的字符串是否有你不應該得到一個JSON字符串例外

+0

我應該在我的for語句中創建JSON對象?我的例子中的 –

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