2011-07-08 6 views
0

私はアンドロイドアプリの書き込みで問題に遭遇しました。アンドロイド:渡しバンドルがオブジェクトのタイプを変更しました

活動1は次のようになります。

// other code here:  
bundle.putString("MyKey" , My_Large_String_containing_HTML); 
Log.d(tag + " - TEST" , "tmp CLASS:" + bundle.getString("MyKey").getClass()); 
Log.d(tag + " - TEST" , "tmp FETCHED:" + bundle.getString("MyKey")); 


// make new intent, stuff it with bundle 
Intent Activity2Intent = new Intent(this.getApplicationContext(), Activity2.class); 

Activity2Intent.putExtras(bundle); 
Log.i(tag, "Bundle stuffed.. preparing to make a new screen..."); 

startActivityForResult(Activity2Intent, 0); 

活動2は次のようになります。

// other set up code 
bundle = this.getIntent().getExtras(); 

My_Large_String_containing_HTML = bundle.getString("MyKey"); 

/* throws an exception above 
* 
* WARN/Bundle(976): Key description expected String but value was a [Ljava.lang.String;. The default value <null> was returned. 
* 
* WARN/Bundle(976): Attempt to cast generated internal exception: 

* WARN/Bundle(976): java.lang.ClassCastException: [Ljava.lang.String; 
* WARN/Bundle(976):  at android.os.Bundle.getString(Bundle.java:1040) 

*/ 

TLDR。私は文字列を持っていて、HTML(通常は)が入っています。私はそれを第二の活動で利用できるようにする必要があります。私はそれを束に入れました。インテントにバンドルを追加する。意図を消し、バンドルを手に入れよう。 私はバンドルから文字列を取得しようとしますが、配列が得られないという例外があります。/

それでは、私の問題だと私はそれをどのように修正すればよい:

は、私は、配列を使って何をやったことがありませんか?エキストラを取得するために、次に

Activity2Intent.putExtra("MyKey", My_Large_String_containing_HTML); 

、あなたが意図から、バンドルをつかむために持っている:あなたはちょうどまっすぐ意図にエキストラを入れて、この

Activity2Intent.putExtra("MyKey" , My_Large_String_containing_HTML); 
    startActivity(Activity2Intent); 

    //To receive from another Activity 

      Bundle bundle = getIntent().getExtras(); 
      String result=bundle.getString("mykey"); 
+0

あなたのコーディングスタイル/フォーマットは非常に非標準的であり、したがって悪いです。してください修正してください:( – binnyb

答えて

0

使用

Bundle bundle = this.getIntent().getExtras(); 
My_Large_String_containing_HTML = bundle.getString("Mykey"); 
+0

私はすでにこれを試したことを言及すべきでした。 同じ問題です。私は契約が何であるか分かりませんが、私の文字列がバンドルに追加されたときに不適切にシリアル化されていると思います。バンドルがバンドルされた後のバンドルは、正しくパックされていないため、新しいアクティビティが失敗します。 私は自分のパーセルクラスを作り、それを試してみるだけです。 – PaperBag

1

デバッグの数が時間になったので、問題があった。

説明: "MyKey"は3番目のクラスの文字定数です。

Class3に:

static protected final String My_Static_string_key = "description"; 

Activity2:

My_Large_String_containing_HTML = bundle.getString(Class3.My_Static_string_key); 

Activity1:

bundle.putString(Class3.My_Static_string_key , My_Large_String_containing_HTML); 

私はそのキーと文字列のすべての種類を格納および取得しようとしました。長い、短い、HTMLなし、HTMLなしなど。何も働かなかった!

次に鍵を変更しました。 Class3.My_Static_string_keyを格納して検索するキーとして使用する代わりに、

私はClass3 - "description"に格納されている文字列にハードコードしました。このはまだ失敗しました

修正するための土壇場の試み: 私はそれが働いていた「BOB」

に文字列のハードコーディングを変更!

私はClass3の文字列を変更しました。はまだです。

tldr:キーを使用していました。何らかの理由で、私が使っていた文字列が壊れてしまった。私はキーの文字列を変更し、今はすべて動作します。