Android:从JSON对象创建字符串数组
我正在尝试在我的应用程序中创建图像库。我已经得到了JSON中的图像,我想从Android:从JSON对象创建字符串数组,android,json,Android,Json,我正在尝试在我的应用程序中创建图像库。我已经得到了JSON中的图像,我想从AsyncTask中的JSON对象创建一个字符串数组,这样我就可以将字符串数组弹出到Universal Image Loader中。我想我已经正确地获得了AsyncTask字符串,但是我很难理解如何将字符串放入数组,即images[]和imagesdescriptions[]。我的JSON如下所示: { "gallery" : [ { "id":"
AsyncTask
中的JSON对象创建一个字符串数组,这样我就可以将字符串数组弹出到Universal Image Loader中。我想我已经正确地获得了AsyncTask
字符串,但是我很难理解如何将字符串放入数组,即images[]
和imagesdescriptions[]
。我的JSON如下所示:
{
"gallery" :
[
{
"id":"0001",
"galleryurl":"http://www.mysite.com/apps/wcbc/images/building0001.jpg",
"gallerydescr":"image description 1"
},
{
"id":"0002",
"galleryurl":"http://www.mysite.com/apps/wcbc/images/building00011.jpg",
"gallerydescr":"image description 2"
}
]
}
public static final String[] IMAGES = new String[] {
"http://www.mysite.com/apps/wcbc/images/building0001.jpg",
"http://www.mysite.com/apps/wcbc/images/building00011.jpg"
};
我希望生成的图像[]
如下所示:
{
"gallery" :
[
{
"id":"0001",
"galleryurl":"http://www.mysite.com/apps/wcbc/images/building0001.jpg",
"gallerydescr":"image description 1"
},
{
"id":"0002",
"galleryurl":"http://www.mysite.com/apps/wcbc/images/building00011.jpg",
"gallerydescr":"image description 2"
}
]
}
public static final String[] IMAGES = new String[] {
"http://www.mysite.com/apps/wcbc/images/building0001.jpg",
"http://www.mysite.com/apps/wcbc/images/building00011.jpg"
};
下面是我的AsyncTask
类,我想在其中将JSON解析为字符串[]
:
private class DownloadJSON extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
galleryArrList = new ArrayList<HashMap<String, String>>();
JGrid4Adapter jParser = new JGrid4Adapter();
// getting JSON string from URL
JSONObject jsonOb = jParser.getJSONFromUrl(jsonUrl);
try {
JSArrGallery = jsonOb.getJSONArray(TAG_GALLERY);
// looping through All gallery images
for (int i = 0; i < JSArrGallery.length(); i++) {
JSONObject galleryJO = JSArrGallery.getJSONObject(i);
String idStr = galleryJO.getString(TAG_ID);
String urlStr = galleryJO.getString(TAG_GALLERYURL);
String descrStr = galleryJO.getString(TAG_GALLERYDESCR);
//-- How to create String Array at this point?
}// -- END for loop
} catch (JSONException e) {
e.printStackTrace();
}// --- END Try
return null;
}
@Override
protected void onPostExecute(Void args) {
//--- do stuff here
}
}
私有类下载JSON扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
galleryArrList=新的ArrayList();
JGrid4Adapter jParser=新的JGrid4Adapter();
//从URL获取JSON字符串
JSONObject jsonOb=jParser.getJSONFromUrl(jsonUrl);
试一试{
jsarrgally=jsonOb.getJSONArray(TAG_GALLERY);
//循环浏览所有画廊图片
对于(int i=0;i
任何帮助都很酷。使用数组
String AidStr[]=new String();
String AurlStr[]=new String();
String AdescrStr[]=new String();
for (int i = 0; i < JSArrGallery.length(); i++) {
JSONObject galleryJO = JSArrGallery.getJSONObject(i);
String idStr = galleryJO.getString(TAG_ID);
String urlStr = galleryJO.getString(TAG_GALLERYURL);
String descrStr = galleryJO.getString(TAG_GALLERYDESCR);
//-- How to create String Array at this point?
AidStr[i]=idStr;
AurlStr[i]=urlStr;
AdescStr[i]=descrStr;
}// -- END for loop
String AidStr[]=new String();
字符串AurlStr[]=新字符串();
字符串AdescrStr[]=新字符串();
对于(int i=0;i
或
通过使用ArrayList
ArrayList<String> AidStr=new ArrayList<String>();
ArrayList<String> AurlStr=new ArrayList<String>();
ArrayList<String>AdescrStr =new ArrayList<String>();
for (int i = 0; i < JSArrGallery.length(); i++) {
JSONObject galleryJO = JSArrGallery.getJSONObject(i);
String idStr = galleryJO.getString(TAG_ID);
String urlStr = galleryJO.getString(TAG_GALLERYURL);
String descrStr = galleryJO.getString(TAG_GALLERYDESCR);
//-- How to create String Array at this point?
AidStr.add(idstr);
AurlStr.add(urlStr);
AdescStr.add(descrStr);
}// -- END for loop
ArrayList AidStr=new ArrayList();
ArrayList AurlStr=新的ArrayList();
ArrayListAdescrStr=新的ArrayList();
对于(int i=0;i
您需要有一种从异步任务中检索字符串数组的方法。为此,请对代码进行以下更改:
private class DownloadJSON extends AsyncTask<Void, Void, Object[]> {//-------THIS LINE
private Callback callback;//---THIS LINES
public DownloadJSON(Callback callback) {//---THESE LINES
this.callback = callback;
}
@Override
protected Void doInBackground(Void... params) {
galleryArrList = new ArrayList<HashMap<String, String>>();
JGrid4Adapter jParser = new JGrid4Adapter();
// getting JSON string from URL
JSONObject jsonOb = jParser.getJSONFromUrl(jsonUrl);
try {
JSArrGallery = jsonOb.getJSONArray(TAG_GALLERY);
// looping through All gallery images
String[] imagesArray = new String[JSArrGallery.length()];//------THIS LINE
String[] descriptionsArray = new String[JSArrGallery.length()];//------THIS LINE TOO
for (int i = 0; i < JSArrGallery.length(); i++) {
JSONObject galleryJO = JSArrGallery.getJSONObject(i);
String idStr = galleryJO.getString(TAG_ID);
String urlStr = galleryJO.getString(TAG_GALLERYURL);
String descrStr = galleryJO.getString(TAG_GALLERYDESCR);
imagesArray[i] = urlStr;//-------THIS LINE
descriptionsArray[i] = descrStr;//----THIS LINE TOO
}// -- END for loop
return new Object[]{imagesArray, descriptionsArray};//----THIS LINE
} catch (JSONException e) {
e.printStackTrace();
}// --- END Try
return null;
}
@Override
protected void onPostExecute(Object[] args) {
//---THESE LINES
if (args == null)
callback.call(null, null);
else
callback.call(args[0], args[1]);
}
//-----THESE LINES
public interface Callback {
public void call(String[] imageURLs, String[] imageDescriptions);
}
}
在数组中添加元素之前,请使用jsarrgally.length()
初始化图像
数组,如下所示:
JSArrGallery = jsonOb.getJSONArray(TAG_GALLERY);
IMAGES=new String[JSArrGallery.length()]; //<< initialize array here
for (int i = 0; i < JSArrGallery.length(); i++) {
//..your code to get image url fom JSONObject...
// add url to Array
IMAGES[i]=urlStr;
}
jsarrgally=jsonOb.getJSONArray(TAG_GALLERY);
IMAGES=新字符串[JSArrGallery.length()]//但这是个坏主意。。。最好使用一些自己的类(或者更确切地说是数组/列表),比如类容器{string id;string which;string someotherprop;}
或者至少使用映射的数组/列表