我有一个Json字符串。
每次打开我的应用程序并使用它时,我想获得一个条目。 搜索网络,我创建了这样的东西:
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 :(得分: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");
只要您要查找的字符串存在,就不应该获得JSONException
答案 1 :(得分: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());
}
答案 2 :(得分:-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());