飞奔的篮球 · hamibot中json如何只让其输入数字, ...· 1 周前 · |
高大的柚子 · 曝光!果子狸等野生动物被公然售卖,这些人真的 ...· 1 月前 · |
想出国的乌龙茶 · 刘延东会见韩国总统李明博· 1 年前 · |
豪情万千的板凳 · 口袋妖怪系列专题:第四世代《珍珠、钻石、白金 ...· 1 年前 · |
聪明的金针菇 · 《丝路豪侠》全集-电视剧-免费在线观看· 1 年前 · |
有没有办法将JSON Array转换为普通的Java Array来进行android ListView数据绑定?
我知道这个问题是关于JSONArray的,但这里有一个我发现很有用的例子,在这里你不需要使用JSONArray从JSONObject中提取对象。
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
String jsonStr = "{\"types\":[1, 2]}";
JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
List<Long> list = (List<Long>) json.get("types");
if (list != null) {
for (Long s : list) {
System.out.println(s);
}
也适用于字符串数组
这里有一个更好的方法:如果你从API获取数据。然后解析JSON并将其加载到您的listview中:
protected void onPostExecute(String result) {
Log.v(TAG + " result);
if (!result.equals("")) {
// Set up variables for API Call
ArrayList<String> list = new ArrayList<String>();
try {
JSONArray jsonArray = new JSONArray(result);
for (int i = 0; i < jsonArray.length(); i++) {
list.add(jsonArray.get(i).toString());
}//end for
} catch (JSONException e) {
Log.e(TAG, "onPostExecute > Try > JSONException => " + e);
e.printStackTrace();
adapter = new ArrayAdapter<String>(ListViewData.this, android.R.layout.simple_list_item_1, android.R.id.text1, list);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText( ListViewData.this, "Position :" + itemPosition + " ListItem : " + itemValue, Toast.LENGTH_LONG).show();
adapter.notifyDataSetChanged();
adapter.notifyDataSetChanged();
...
我们从conversion JSONArray -> List < JSONObject >开始
public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array)
throws JSONException {
ArrayList<JSONObject> jsonObjects = new ArrayList<>();
for (int i = 0;
i < (array != null ? array.length() : 0);
jsonObjects.add(array.getJSONObject(i++))
return jsonObjects;
}
接下来创建通用版本,将array.getJSONObject(i++)替换为POJO
示例:
public <T> static List<T> getJSONObjectListFromJSONArray(Class<T> forClass, JSONArray array)
throws JSONException {
ArrayList<Tt> tObjects = new ArrayList<>();
for (int i = 0;
i < (array != null ? array.length() : 0);
tObjects.add( (T) createT(forClass, array.getJSONObject(i++)))
return tObjects;
private static T createT(Class<T> forCLass, JSONObject jObject) {
// instantiate via reflection / use constructor or whatsoever
T tObject = forClass.newInstance();
// if not using constuctor args fill up
// return new pojo filled object
return tObject;
}
可以使用
String[]
而不是
ArrayList<String>
希望它能帮上忙!
private String[] getStringArray(JSONArray jsonArray) throws JSONException {
if (jsonArray != null) {
String[] stringsArray = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
stringsArray[i] = jsonArray.getString(i);
return stringsArray;
} else
return null;
}
我们可以简单地将JSON转换成可读的字符串,并使用string类的" split“方法对其进行拆分。
String jsonAsString = yourJsonArray.toString();
//we need to remove the leading and the ending quotes and square brackets
jsonAsString = jsonAsString.substring(2, jsonAsString.length() -2);
//split wherever the String contains ","
String[] jsonAsStringArray = jsonAsString.split("\",\"");
要改进Pentium10s文章,请执行以下操作:
我只是使用foreach循环将JSON数组的元素放入列表中。这样代码就更清晰了。
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonObject;