0

私は最初に、これを扱っている他のすべての投稿を見て、それらすべてを試したと言って、これを始めます。

私は、他の投稿で尋ねられたのと同じことをしようとしています。これは、Intent を使用して、あるアクティビティから別のアクティビティに ArrayList の値を渡すことです。

クラスを正しく実装したと感じています。私が使用しているメイン クラス (Route_Class) は以下のとおりです。

public static final Parcelable.Creator<Route_Class> CREATOR = 
        new Parcelable.Creator<Route_Class>()

public Route_Class createFromParcel(Parcel in) 
    { 
        System.out.println("in Parcel In");
        Route_Class route_class = new Route_Class();
        route_class.layout_width2 = in.readString();
        route_class.latitude = in.readDouble();
        route_class.longitude = in.readDouble();
        route_class.startingLat = in.readDouble();
        route_class.startingLong = in.readDouble();
        route_class.name   = in.readString();
        route_class.routeName = in.readString();
        route_class.GeoPoints = in.readString();
        route_class.layout_width = in.readString();
        route_class.layout_height = in.readString();
        route_class.orientation = in.readString();
        route_class.xmlns = in.readString();
        route_class.id = in.readString();
        route_class.clickable = in.readInt() == 0;
        route_class.enabled = in.readInt() == 0;
        route_class.layout_height2 = in.readString();
        route_class.apiKey = in.readString();           

                    Bundle b = in.readBundle(GeoPoints_Class.class.getClassLoader());        
        route_class.geoPoints_arraylist = b.getParcelableArrayList("_geoPoints_arraylist");

        return route_class;
    }


    @Override
    public Route_Class[] newArray(int size) 
    {
        return new Route_Class[size];
    }
};

Route_Class で使用される 2 番目のクラス (GeoPoints_Class) を次に示します。

 public static final Parcelable.Creator<GeoPoints_Class> CREATOR = 
        new Parcelable.Creator<GeoPoints_Class>() 
        { 
            public GeoPoints_Class createFromParcel(Parcel in) { 
                GeoPoints_Class geoPoints_class = new GeoPoints_Class();
                System.out.println("In Parcel In for GEoPoints");
                geoPoints_class.lat = in.readDouble();
                geoPoints_class.lon = in.readDouble();
                geoPoints_class.location   = in.readString();

                return geoPoints_class;

次はオブジェクトを配置する場所です..

 Intent i = new Intent(getApplicationContext(), route.class);

                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                Bundle b = new Bundle();
                b.putParcelableArrayList("route_Classes_temp", route_Classes);
                i.putExtra("selectiontemp",parent.getItemAtPosition(pos).toString());
                i.putExtras(b);
                startActivityForResult(i, 100);

最後に、オブジェクトを取得しようとする場所...

 Bundle b = this.getIntent().getExtras();

    route_Classes = b.getParcelableArrayList("route_Classes_temp");
    userMapSelection = b.getString("selectiontemp");

これをリソースとして使用しようとしています: http://androidideasblog.blogspot.com/2010/02/passing-list-of-objects-between.htmlですが、機能していないようです。アプリケーションを実行すると、次のエラーが発生します (不正なマジック ナンバーが参照している手がかりはありますか?):

 11-09 14:48:52.951: E/Bundle(1128): readBundle: trace = java.lang.RuntimeException
 11-09 14:48:52.951: E/Bundle(1128):    at android.os.Bundle.readFromParcelInner(Bundle.java:1580)
 11-09 14:48:52.951: E/Bundle(1128):    at android.os.Bundle.<init>(Bundle.java:82)
 11-09 14:48:52.951: E/Bundle(1128):    at android.os.Parcel.readBundle(Parcel.java:1381)

前もって感謝します!

4

1 に答える 1

0

一度試してみましたが、うまくいきませんでした。だからあなたはそれを行うことができます:

クラスを作成し、それを Application クラスから拡張します。ここでリストをプライベートに定義します。そして、getter の setter メソッドを記述します。このクラスは、アプリケーションが開かれるまでデータを保持します。最初のアクティビティでリストを設定できます。そして2番目の活動で読む

アクティビティでこのクラスのサンプルを作成する必要があります (たとえば、アプリケーション クラス名: App):

App app = (App) getApplicationContext();

そして、そのリストを取得できます(たとえば、アプリケーションクラスのリスト名:リスト)

App app = (App) getApplicationContext();
app.getList();
于 2012-11-09T21:27:16.220 に答える