我正试图在这个json bellow中获取这些图像数组并将其显示在GridView中,但我不知道为什么我无法达到它
[
{
"id": 385,
"title": "this title",
"image": "logo.png",
"description": "description ",
"images": [
"logo.png",
"image1.png"
],
"user_name": "my name",
"telephone": "0123456789",
"city_name": "جدة",
"created_at": "2017-03-20T17:51:16+00:00",
"time_ago": "6 days ago",
"user_id": 159
}
]
这是我完整的AyncTask。
private class AysncImages extends AsyncTask<String, Void, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
// pDialog = new ProgressDialog(getActivity());
// pDialog.setMessage("Please wait...");
// pDialog.setCancelable(false);
// pDialog.show();
}
@Override
protected Integer doInBackground(String... arg0) {
// Building Parameters
HttpHandler sh = new HttpHandler();
String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));
//jsonStr = sh.makeServiceCall(url + 373); //or url + ID
Log.i(TAG, "doInBackground Image: " + jsonStr);
if (jsonStr != null) {
try
{
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray arrayObj = jsonObj.getJSONArray("images");
Log.i(TAG, "array: "+ jsonObj);
GridItem item = new GridItem();
for (int i = 0; i < arrayObj.length(); i++) {
String images = arrayObj.getString(i);
Log.i(TAG, "parseResult: " + jsonObj);
item.setImage(IMAGE_LINK + images);//IMAGE_LINK +
Log.i(TAG, "parseResult: " + IMAGE_LINK + " " + images);
mGridData.add(item);
}
// Getting JSON Array node
} catch (JSONException e1) {
e1.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Integer result) {
// if (result == 1) {
mGridAdapter.setGridData(mGridData);
//} else {
// Toast.makeText(getActivity(), "Failed to fetch data!", Toast.LENGTH_SHORT).show();
// }
//Hide progressbar
mProgressBar.setVisibility(View.GONE);
}
}
在我的日志中,我无法联系到jsonObj
或arrayObj
我只能达到jsonStr
我错过的内容?
我的日志为jsonStr
答案 0 :(得分:0)
试试这个..
<select ng-options="user as user.name for user in processMapAttrib.auditNotifyUsers.unAssignedUsers"
ng-model="selectedOption"></select>
答案 1 :(得分:0)
试试这个,
try {
JSONArray jArr = new JSONArray(jsonStr);
for (int i = 0; i < jArr.length(); i++) {
JSONObject Obj = jArr.getJSONObject(i);
String id=Obj.getString("id");
String title=Obj.getString("title");
String description=Obj.getString("description");
JSONArray image_arr=Obj.getJSONArray("images");
for (int j = 0; j < image_arr.length(); j++) {
String value=image_arr.getString(j);
Log.d("TAG","value:"+value);
}
}
} catch (JSONException e1) {
e1.printStackTrace();
}
答案 2 :(得分:0)
首先,看看你的Json定义:
[
{
"id": 385,
"title": "this title",
...
}
]
还要看看你在代码中访问Json的方式:
String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));
JSONObject jsonObj = new JSONObject(jsonStr);
JSONArray arrayObj = jsonObj.getJSONArray("images");
在你的代码中,jsonObj
应该是你json的根对象,但如果仔细观察,你的json 没有根节点。 You Json在根级别是数组。这就是您无法访问jsonObj
的原因,因此也就是您无法访问images
数组的原因。
要解决此问题,您有两个选择:
1)通过删除[
和]
,使服务器返回对象而不是数组。 E.g。
{
"id": 385,
"title": "this title",
...
}
2)将代码更改为开始读取根作为数组的第一个位置。 E.g:
String jsonStr = sh.makeServiceCall(String.valueOf(Config.BASE_URL));
JSONArray jsonArray = new JSONArray(jsonStr);
JSONObject jsonObj = jsonArray.get(0);
JSONArray arrayObj = jsonObj.getJSONArray("images");
(正如旁注:我还没有在Android上编程一段时间,所以我不确定上面代码的正确性)
如果您可以更改服务器,则最好选择1。