2013-03-07 1 views
42

Nella mia applicazione ho bisogno di convertire il mio arraylist in una stringa di un array. Tuttavia, sto ottenendo un errore:ClassCastException: java.lang.Object [] non può essere lanciato su java.lang.String [] android

ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] android 

Alla linea con listofurls sto ottenendo l'errore: listofurls = (String[])image_urls.toArray();

Questo è il codice completo:

public class Test2 extends AsyncTask<Void, Void, Void> 
{ 
    String[] listofurls ; 
    private static final String url = "http://www.tts.com/album_pro/array_to_encode"; 
    JSONParser jParser = new JSONParser(); 
    ArrayList<String> image_urls = new ArrayList<String>(); 

    protected void onPreExecute() { 
    //Log.e(LOG_CLASS, "in side assyntask"); 
    } 

    protected Void doInBackground(Void... voids) { 
    Log.v("Async","Async"); 
    JSONObject json = jParser.getJSONFromUrl(url); 

    try { 
     JSONObject seo = json.getJSONObject("SEO"); 
     JSONArray folio = seo.getJSONArray("Folio"); 

     // JSONArray image_urls1 = new JSONArray(); 
     //String s1=seo.getString("Folio"); 

     for(int i=0;i<folio.length();++i) { 
     String m = folio.getString(i); 
     Log.v("M"+i,m); 
     image_urls.add(m); 
     Log("test-url"+image_urls); 
     } 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

    listofurls = (String[])image_urls.toArray(); //ERROR OCCURS HERE 

    return null; 
    } 

    private void Log(String string) { 
    Log.v("Test",string); 
    } 

    protected void onProgressUpdate(Integer... progress) { } 

    protected void onPostExecute(Void result) { 
    mAdapter = new ImagePagerAdapter(getSupportFragmentManager(),listofurls.length); 
    mAdapter.setImageurls(listofurls); 
    mPager.setAdapter(mAdapter); 
    } 
+0

@MiserableVariable migliore formulazione, sì .. –

+0

significato in realtà opposto, ma si ottiene il punto :) –

risposta

90

provare

listofurls = image_urls.toArray(new String[image_urls.size()]); 

Nota: suggerisco di rinominare listofurls su arrayOfURLs

+0

ancora trovato l'error.it dice, causato da: java.lang.ClassCastException: java.lang.Object [] non può essere cast to java.lang.String [] – Shweta

+0

intendete dire: String [] listofurls; listofurls = image_urls.toArray (new String [image_urls.size()]); , invece di "listofurls" dovrei usare "arrayOFURLs" ?? ma come fa la differenza – Shweta

+0

suggerisco di provare e localizzare il problema, prova questo: Lista image_urls = new ArrayList (); String [] listofurls = image_urls.toArray (new String [image_urls.size()]); –

2

Prova questa:

ArrayList<String> stock_list = new ArrayList<String>(); 
stock_list.add("stock1"); 
stock_list.add("stock2"); 
String[] stockArr = new String[stock_list.size()]; 
stockArr = stock_list.toArray(stockArr); 
for(String s : stockArr) 
    System.out.println(s); 

Preso direttamente da qui: link

24

Si dovrebbe usare toArray come già detto, ma non in quel modo.

O inizializzare l'array primo e riempirlo:

String[] urlArray = new String[image_urls.size()]; 
image_urls.toArray(urlArray); 

Dopo di che, urlArray conterrà tutte le stringhe da image_urls, o passare una lunghezza zero stringa array:

listofurls = (String[]) image_urls.toArray(new String[0]); 

See la documentazione per toArray().

+0

Altre soluzioni non hanno funzionato per me. Il passaggio della matrice di lunghezza 0 ha funzionato. – mythicalcoder

3

Hai solo bisogno di ottenere il contenuto dell'array in un array, giusto ??

Non puoi fare così?

 for(int i=0;i<folio.length();++i) 
     { 
      String m = folio.getString(i); 
      Log.v("M"+i,m); 
      image_urls.add(m); 
      Log("test-url"+image_urls); 


      listofurls[i] = m ; 
     } 
0
listofurls = image_urls.toArray(new String[0]); 

che dovrebbe fare il trucco per tutti i casi, anche se non si conosce la dimensione della matrice risultante.