2013-04-16 61 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()); 
}