2012-01-09 8 views
0

バンドル内で余分な文字列配列を渡す際に問題があります。 moduleType = "v"のときに、タイトル、情報、スピーカーを格納する次のコードを書いています。このコードでは、バンドルを使用してPopulateDataアクティビティに文字列の配列を配置し、それを次のアクティビティ、つまりDataListアクティビティに渡します。次のように私のコードは次のとおりです。配列に格納された値が、nullで表示されるバンドルとして渡される理由android

PopulateData.java

for(int i = 0; i < moduleTypes.length; i++){ 
      String moduleType = moduleTypes[i]; 
      JSONObject jsonModule = new JSONObject(content[i]); 
      //Bundle[] bundle = new Bundle[jsonModule.length()]; 
      Log.i(TAG, "ModuleType = v " + (moduleType == "v")); 
      Log.i(TAG, "ModuleType = v " + moduleType.equals("v")); 
      Log.i(TAG, "ModuleType = " + moduleType); 
      Log.i(TAG, "ModuleType Length = " + moduleTypes.length); 
      if(moduleType.equals("v")){ 
       //String[] title = new String[jsonModule.length()]; 
       //String[] info = new String[jsonModule.length()]; 
       //String[] speaker = new String[jsonModule.length()]; 
       String[] videoTypes = dbAdapter.collectVideoTypeFromListTable(); 
       String[] title = new String[videoTypes.length]; 
       String[] info = new String[videoTypes.length]; 
       String[] speaker = new String[videoTypes.length]; 
       title[i] = jsonModule.getString("title"); 
       info[i] = jsonModule.getString("info"); 
       speaker[i] = jsonModule.getString("speaker"); 
       Log.i(TAG, "titleArray"); 
       Log.i(TAG,title[i]); 
       Log.i(TAG, "infoArray"); 
       Log.i(TAG,info[i]); 
       Log.i(TAG, "speakerArray"); 
       Log.i(TAG,speaker[i]); 

       bundle.putStringArray("titleArray", title); 
       bundle.putStringArray("infoArray", info); 
       bundle.putStringArray("speakerArray", speaker); 
       bundle.putString("date", strDate); 

      } 
      intent.putExtras(bundle); 

     } 

DataList.java

bundle = getIntent().getExtras(); 
     title = bundle.getStringArray("titleArray"); 
     Log.i(TAG, "Title Size="+String.valueOf(title.length)); 
     info = bundle.getStringArray("infoArray"); 
     Log.i(TAG, "Info Size="+String.valueOf(info.length)); 
     speaker = bundle.getStringArray("speakerArray"); 
     Log.i(TAG, "Speaker Size="+String.valueOf(speaker.length)); 
     date = bundle.getString("date"); 
     Log.i(TAG, "Bundle Size="+String.valueOf(bundle.size())); 
     Log.i(TAG, ""+title[0]); 
     //bundle.p 
     //title = bundle.getString("title"); 
     //info = bundle.getString("info"); 
     //speaker = bundle.getString("speaker"); 
     for(int i = 0; i < title.length; i++){ 
      Log.i(TAG, "title["+i+"]"+title[i]); 
      Log.i(TAG, "info["+i+"]"+info[i]); 
      Log.i(TAG, "speaker["+i+"]"+speaker[i]); 
      Log.i(TAG, date); 
      Content content = new Content(title[i], info[i], speaker[i], date); 
      contentList.add(content); 
     } 

DDMS:

01-09 18:53:04.305: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.305: INFO/PopulateData(435): ModuleType = v true 
01-09 18:53:04.305: INFO/PopulateData(435): ModuleType = v 
01-09 18:53:04.305: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.315: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.315: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.315: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.325: INFO/PopulateData(435): titleArray 
01-09 18:53:04.325: INFO/PopulateData(435): Capital Budgeting 
01-09 18:53:04.325: INFO/PopulateData(435): infoArray 
01-09 18:53:04.325: INFO/PopulateData(435): Bhaavesh bhai will give full to training of Capital budgeting to team deltecs. All the best for him. 
01-09 18:53:04.325: INFO/PopulateData(435): speakerArray 
01-09 18:53:04.325: INFO/PopulateData(435): Bhaavesh Bhai 
01-09 18:53:04.325: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.325: INFO/PopulateData(435): ModuleType = v true 
01-09 18:53:04.335: INFO/PopulateData(435): ModuleType = v 
01-09 18:53:04.335: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.345: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.345: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.345: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.345: INFO/PopulateData(435): titleArray 
01-09 18:53:04.345: INFO/PopulateData(435): Nixon Cameras 
01-09 18:53:04.345: INFO/PopulateData(435): infoArray 
01-09 18:53:04.355: INFO/PopulateData(435): Nixon India is a leading camera manufacters in India. 
01-09 18:53:04.355: INFO/PopulateData(435): speakerArray 
01-09 18:53:04.355: INFO/PopulateData(435): Nixon India 
01-09 18:53:04.355: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.365: INFO/PopulateData(435): ModuleType = v true 
01-09 18:53:04.365: INFO/PopulateData(435): ModuleType = v 
01-09 18:53:04.365: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.375: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.375: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.375: INFO/DronaDBAdapter(435): Type: v 
01-09 18:53:04.385: INFO/PopulateData(435): titleArray 
01-09 18:53:04.385: INFO/PopulateData(435): Nixon Cameras 
01-09 18:53:04.385: INFO/PopulateData(435): infoArray 
01-09 18:53:04.385: INFO/PopulateData(435): Nixon India is a leading camera manufacters in India. 
01-09 18:53:04.385: INFO/PopulateData(435): speakerArray 
01-09 18:53:04.395: INFO/PopulateData(435): Nixon India 
01-09 18:53:04.395: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.395: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.395: INFO/PopulateData(435): ModuleType = n 
01-09 18:53:04.405: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.405: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.405: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.415: INFO/PopulateData(435): ModuleType = n 
01-09 18:53:04.415: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.415: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.415: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.425: INFO/PopulateData(435): ModuleType = n 
01-09 18:53:04.425: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.425: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.425: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.435: INFO/PopulateData(435): ModuleType = e 
01-09 18:53:04.435: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.445: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.445: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.445: INFO/PopulateData(435): ModuleType = q 
01-09 18:53:04.445: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.455: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.455: INFO/PopulateData(435): ModuleType = v false 
01-09 18:53:04.455: INFO/PopulateData(435): ModuleType = s 
01-09 18:53:04.465: INFO/PopulateData(435): ModuleType Length = 9 
01-09 18:53:04.465: INFO/ActivityManager(59): Starting activity: Intent { cmp=com.drona.app/.DataList (has extras) } 
01-09 18:53:04.545: INFO/DataList(435): Title Size=3 
01-09 18:53:04.545: INFO/DataList(435): Info Size=3 
01-09 18:53:04.545: INFO/DataList(435): Speaker Size=3 
01-09 18:53:04.545: INFO/DataList(435): Bundle Size=4 
01-09 18:53:04.555: INFO/DataList(435): null 
01-09 18:53:04.555: INFO/DataList(435): title[0]null 
01-09 18:53:04.555: INFO/DataList(435): info[0]null 
01-09 18:53:04.555: INFO/DataList(435): speaker[0]null 
01-09 18:53:04.565: INFO/DataList(435): Jan 09 
01-09 18:53:04.565: INFO/DataList(435): title[1]null 
01-09 18:53:04.565: INFO/DataList(435): info[1]null 
01-09 18:53:04.565: INFO/DataList(435): speaker[1]null 
01-09 18:53:04.565: INFO/DataList(435): Jan 09 
01-09 18:53:04.565: INFO/DataList(435): title[2]Nixon Cameras 
01-09 18:53:04.575: INFO/DataList(435): info[2]Nixon India is a leading camera manufacters in India. 
01-09 18:53:04.575: INFO/DataList(435): speaker[2]Nixon India 
01-09 18:53:04.575: INFO/DataList(435): Jan 09 

DDMSに表示されるように、最初のアクティビティでバンドルとして渡していた値が正しく表示されていますが、次のアクティビティに行くとnullになります。それはなぜそうですか?私は何か悪いことはありますか?

+0

にこれらのBeanのそれぞれを小包。 –

+0

forループの繰り返しごとに既存のエキストラを上書きしているようです。私があなたの問題をログから正しく理解したら、最初に-loopのためにString []配列を集めて、その後に文字列配列のエクストラとして配置するべきです。 – harism

答えて

2

このコードの塊は、おそらくあなたの問題です:

bundle.putStringArray("titleArray", title); 
bundle.putStringArray("infoArray", info); 
bundle.putStringArray("speakerArray", speaker); 
bundle.putString("date", strDate); 

あなたがループを通過するたびに同梱の各値を超える同一のキーにキーが付いていますので、あなたは、以前の値を交換します反復。あなたは、このカップルの方法で回避できます。

  • がそれぞれの末尾に番号を追加し、入れてますので、バンドルに利用可能であるべき合計数を追跡する配列の配列を使用しますparcelable豆のいくつかの並べ替えにこの情報のすべてを入れてどのくらいのループ
  • に知っているし、その後もあなたが余分に合格する必要があり、他の活動のためにあなたのPopulateData
1

また、情報を次のアクティビティビューバンドルに送信する必要があります。データは送信されたアクティビティにのみ移動します。

これは単に永続化されているキーと値のペアなので大丈夫だと思います。 このようなもの..

// my list of names, icon locations 
Map<String, String> info = new HashMap<String, String>(); 
nameIcons.put("titleArray", title); 
nameIcons.put("infoArray", info); 

次にそれらを共有設定に保存します。

SharedPreferences keyValues = getContext().getSharedPreferences("info_preferences"), Context.MODE_PRIVATE); 
SharedPreferences.Editor keyValuesEditor = keyValues.edit(); 

for (String s : info.keySet()) { 

keyValuesEditor.pustString(s, info.get(s)); 
} 
関連する問題