2013-03-07 3 views
42

私のアプリケーションでは、配列の文字列にarraylistを変換する必要があります。しかし、私はエラーを取得しています:私はエラーを取得していますlistofurlsとラインでClassCastException:java.lang.String []にキャストすることができない[] android

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

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

は、これは完全なコードです:

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より良い言葉遣い、はい.. –

+0

実際には反対の意味ですが、あなたはポイントを取得します。 –

答えて

90

listofurls = image_urls.toArray(new String[image_urls.size()]); 
を試してみてください

注:listofurlsの名前をarrayOfURLsに変更することをお勧めします。

+0

エラーが発生しました。原因:java.lang.ClassCastException:java.lang.Object []にすることはできません。 java.lang.String []へのキャスト – Shweta

+0

あなたは言うつもりです:String [] listofurls; listofurls = image_urls.toArray(新しい文字列[image_urls.size()]); 、 "listofurls"の代わりに "arrayOFURLs"を使うべきですか?どのように違いがありますか? – Shweta

+0

問題をローカライズしてみることをお勧めします。リスト image_urls = new ArrayList (); String [] listofurls = image_urls.toArray(new String [image_urls.size()]); –

2

はこれを試してみてください:

ここから直接取得
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); 

:なく、その方法では、前述したようにlink

24

あなたはtoArrayを使用する必要があります。

どちら最初の配列を初期化し、それを埋める:、urlArrayimage_urlsからすべての文字列を含む、またはゼロ長の文字列配列に通過する

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

その後:

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

参照toArray()のドキュメント

+0

他の解決策が私のために働かなかった。 0の長さの配列を渡しました。 – mythicalcoder

3

arraylistの内容を配列で取得するだけでいいですか?

あなたはこれが好きではありませんか?あなたは結果の配列のサイズがわからない場合でも、すべてのケースのためにトリックを行う必要があります

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

関連する問題