2014-01-03 5 views
1

Я пытаюсь создать галерею изображений в своем приложении. У меня есть изображения в JSON, и я хотел бы создать String Array из объектов JSON в AsyncTask, чтобы я мог поместить String Array в Universal Image Loader. Я думаю, что у меня есть AsyncTask, правильно получающий строки, но я в тупике, как поместить строки в массив, т.е. images[] и imageDescriptions[]. Моя JSON выглядит следующим образом:Android: создать String Array из объекта 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" 
      } 
    ] 
} 

, и я хочу, чтобы в результате images[] выглядеть следующим образом:

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 в String[]:

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 

    } 

} 

Любая помощь будет прохладной.

+0

, но это плохая идея ... лучше использовать собственный класс (или, скорее, массив/список из них), например 'class container {string id; нить; string someotherprop;} 'или по крайней мере массив/список' Map ' – Selvin

ответ

1

С помощью массива

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 

или

С помощью 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 
+0

Я получил его для работы с помощью ArrayList - спасибо! – kirktoon1882

0

Вы должны иметь способ извлечения массив строк из вашего AsyncTask. Чтобы сделать это, внести эти изменения в код:

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); 
    } 

} 

Наконец, чтобы довести это все вместе, сделайте следующее:

new DownloadJSON(new DownloadJSON.Callback() { 
    public void call(String[] imageURLs, String[] imageDescriptions) { 
     //TODO handle these arrays now 
    } 
}).execute(); 
0

Использование JSArrGallery.length() для инициализации IMAGES массива перед добавлением элемента в массиве как:

 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; 

      } 

вместо использования массива ArrayList для хранения изображений URL, если JSONArray размер динамического

Смежные вопросы