Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:从JSON对象创建字符串数组_Android_Json - Fatal编程技术网

Android:从JSON对象创建字符串数组

Android:从JSON对象创建字符串数组,android,json,Android,Json,我正在尝试在我的应用程序中创建图像库。我已经得到了JSON中的图像,我想从AsyncTask中的JSON对象创建一个字符串数组,这样我就可以将字符串数组弹出到Universal Image Loader中。我想我已经正确地获得了AsyncTask字符串,但是我很难理解如何将字符串放入数组,即images[]和imagesdescriptions[]。我的JSON如下所示: { "gallery" : [ { "id":"

我正在尝试在我的应用程序中创建图像库。我已经得到了JSON中的图像,我想从
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;}
或者至少使用
映射的数组/列表