9

次のように、配列リストの構造をインテントに渡そうとしています。呼び出し関数で使用しています

ArrayList<Parliament> s=(ArrayList<Parliament>)msg.obj;                                 
Intent i = new Intent(ReadTasks.this, GenrateTasks.class);                          
i.putExtra("tasks", s);
startActivity(i);

そして、呼び出された関数で

Bundle b = getIntent().getExtras();
if(b!=null)
{           
    ArrayList<Parliament> as = (ArrayList<Parliament>)b.getSerializable("tasklist");
}

私は両方のクラスでシリアライズ可能な実装を与えましたが、行開始アクティビティの呼び出し関数でマーシャリングできません..実行時エラーが発生しました。進め方を教えてください!

編集 1: スタック トレース:

04-01 22:21:53.999: E/AndroidRuntime(2078): FATAL EXCEPTION: main
04-01 22:21:53.999: E/AndroidRuntime(2078): java.lang.RuntimeException: Parcel: unable to marshal value com.viralm.readjson.Parliament@413597f0
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeValue(Parcel.java:1137)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeList(Parcel.java:524)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeValue(Parcel.java:1097)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeMapInternal(Parcel.java:493)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Bundle.writeToParcel(Bundle.java:1612)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Parcel.writeBundle(Parcel.java:507)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.content.Intent.writeToParcel(Intent.java:5846)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1606)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.app.Activity.startActivityForResult(Activity.java:3190)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.app.Activity.startActivity(Activity.java:3297)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at com.viralm.readjson.ReadTasks$1.handleMessage(ReadTasks.java:61)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.os.Looper.loop(Looper.java:137)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at android.app.ActivityThread.main(ActivityThread.java:4340)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at java.lang.reflect.Method.invokeNative(Native Method)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at java.lang.reflect.Method.invoke(Method.java:511)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-01 22:21:53.999: E/AndroidRuntime(2078):     at dalvik.system.NativeStart.main(Native Method)

私の議会クラスには、セッターとゲッターを備えた 5 つの文字列があります。

4

3 に答える 3

3

Parcelable が推奨されている場合、Serializable の実装はパフォーマンスが低いと見なされます。

私はまったく同じ質問をしていParcelableました.

あなたは単に作成することができます

public static ArrayList<Parliament> myObjects = .. 

経由で他の場所から使用するMyRefActivity.myObjects

アクティビティを含むアプリケーションのコンテキストで、public static 変数が何を意味するのかよくわかりませんでした。これについて、またはこのアプローチのパフォーマンス面についても疑問がある場合は、次を参照してください。

乾杯。

于 2015-02-02T15:05:26.553 に答える
1

オブジェクト クラスを Parcelable にして、後で使用してみてください

bundlename.putParcelableArrayList
于 2015-07-07T06:58:38.880 に答える