2016-10-14 5 views
-4

から多次元配列をキャスト:私はこのコードで私の活動のAから2次元配列を渡すためにしようとしていたbundle.putsSerializable

Bundle b = new Bundle(); 
     b.putSerializable("Qna", g); 
     i.putExtras(b); 
     startActivity(i); 

、私はこのコードで自分のアクティビティBで2次元配列を取得しようとしていました。

QnA = (String[][]) b.getSerializable("Qna"); 

しかし、私はこのようなエラーが出る:

java.lang.RuntimeException:活動を開始できません210 ComponentInfo {com.example.danbrianarenas.letsreview/com.example.danbrianarenas.letsreview.ShowScore}: java.lang.ClassCastException:java.lang.Object []を にキャストできませんjava.lang.String [] []

+0

誰もが私を伝えることはできますか? O.o –

+1

あなたはほとんど役に立たない文脈で質問しているからです。人々は答えることができる質問を好む。 – shmosel

+0

あなたは 'Activity'に何を渡していますか? 'Intent'を作成するコードを表示します。 – Bryan

答えて

0

問題は、2次元配列がシリアル化されてデシリアライズされることによって発生します。 Object[]の要素をループすることで、2次元配列を再構築する必要があります。これにより

QnA = (String[][]) b.getSerializable("Qna"); 

あなたは、この行を交換する必要が私の質問には反対票を得ている理由

String[][] qnaArray = null; 

Object[] serializableArray = (Object[]) getIntent().getExtras().getSerializable("Qna"); 

if (serializableArray != null) { 

    qnaArray = new String[serializableArray.length][]; 

    for(int index = 0; index < serializableArray.length; index++){ 

     qnaArray[index] = (String[]) serializableArray[index]; 

    } 
} 
+0

このソリューションをありがとうございますが、私はより良い解決策を見つけたと思います。私が間違っている場合は私を修正しますが、私はあなたが別のクラスの変数を使用できることを覚えています。アクティビティAのオブジェクトをアクティビティBに作成しました。そこから私はちょうど入れました。 –

+0

アクティビティ_A acta =新しいアクティビティA(); QnA = acta.g;ここで、gは2D配列です。どう思いますか? –

+0

アクティビティの新しいインスタンスを作成しないでください。新しいアクティビティを作成するには、常にIntentシステムを使用する必要があります。あなたが提案しているソリューションはお勧めできませんが、あなたのコードでは快適なものを使うべきです。 – Bobbake4

関連する問題