75

クラスをシリアライズ可能で実装しましたが、それでも機能しませんでした。

これは私のクラスです:

package com.ursabyte.thumbnail;

import java.io.Serializable;

import android.graphics.Bitmap;

public class Thumbnail implements Serializable {

    private static final long serialVersionUID = 1L;
    private String label = "";
    private Bitmap bitmap;

    public Thumbnail(String label, Bitmap bitmap) {
        this.label = label;
        this.bitmap = bitmap;
    }

    public void set_label(String label) {
        this.label = label;
    }

    public String get_label() {
        return this.label;
    }

    public void set_bitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    public Bitmap get_bitmap(){
        return this.bitmap;
    }

    //  @Override
    //  public int compareTo(Thumbnail other) {
    //      if(this.label != null)
    //          return this.label.compareTo(other.get_label());
    //      else
    //          throw new IllegalArgumentException();
    //  }

}

これが私が渡したいものです。

List<Thumbnail> all_thumbs = new ArrayList<Thumbnail>();
all_thumbs.add(new Thumbnail(string, bitmap));
Intent intent = new Intent(getApplicationContext(), SomeClass.class);
intent.putExtra("value", all_thumbs);

しかし、それでも機能しませんでした。Parcelableの使い方がわからないので、代わりにこれを使います。

4

12 に答える 12

170

Bundle.Serializableを使用してシリアライズ可能なリストを渡してみてください:

Bundle bundle = new Bundle();
bundle.putSerializable("value", all_thumbs);
intent.putExtras(bundle);

そして、SomeClass アクティビティでは次のように取得します。

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();

List<Thumbnail> thumbs=
               (List<Thumbnail>)bundle.getSerializable("value");
于 2013-01-15T08:15:35.087 に答える
7

コードを完全で実行可能にするために、ρяσόρєя Kの答えを拡張しました。したがって、「all_thumbs」リストの入力が完了したら、そのコンテンツを 1 つずつバンドルに入れ、次にインテントに入れる必要があります。

Bundle bundle = new Bundle();

for (int i = 0; i<all_thumbs.size(); i++)
bundle.putSerializable("extras"+i, all_thumbs.get(i));

intent.putExtras(bundle);

インテントからエクストラを取得するには、次のものが必要です。

Bundle bundle = new Bundle();
List<Thumbnail> thumbnailObjects = new ArrayList<Thumbnail>();

// collect your Thumbnail objects
for (String key : bundle.keySet()) {
thumbnailObjects.add((Thumbnail) bundle.getSerializable(key));
}

// for example, in order to get a value of the 3-rd object you need to:
String label = thumbnailObjects.get(2).get_label();

の利点Serializableは、その単純さです。Parcelableただし、多くのデータを転送する必要がある場合は、メソッドの使用を検討することをお勧めします。Parcelableこれは、Android 向けに特別に設計されており、Serializable. Parcelable以下を使用してクラスを作成できます。

  1. オンライン ツール - parcelabler
  2. Android Studionのプラグイン - Android Parcelable コード ジェネレーター
于 2015-02-23T11:47:29.067 に答える
3
Intent intent = new Intent(getApplicationContext(),SomeClass.class);
intent.putExtra("value",all_thumbs);
startActivity(intent);

SomeClass.java 内

Bundle b = getIntent().getExtras();
if(b != null)
thumbs = (List<Thumbnail>) b.getSerializable("value");
于 2013-01-15T08:17:28.933 に答える
2

Bundleを作成してから、 putSerializableを使用する必要があります。

List<Thumbnail> all_thumbs = new ArrayList<Thumbnail>();
all_thumbs.add(new Thumbnail(string,bitmap));
Intent intent = new Intent(getApplicationContext(),SomeClass.class);

Bundle extras = new Bundle();

extras.putSerializable("value",all_thumbs);
intent.putExtras(extras);
于 2013-01-15T08:15:48.897 に答える
1

カスタム オブジェクトを作成し、Serializable を実装します。次に、 を使用できますintent.putExtra("package.name.example", <your-serializable-object>)

2 番目のアクティビティでは、getIntent().getSerializableExtra("package.name.example")

それ以外の場合は、このページとこのページに従ってください。

于 2013-01-15T08:17:30.687 に答える
0

これをすべて行ったためにここにいるのに、アクティビティの切り替え時にアプリがまだクラッシュする場合:

私の問題は、Serializable を実装するのを忘れた別のクラスのオブジェクトを使用する ParentClass にありました

public class A implements Serializable {
    
        private B[][] b;
    
}

public class B implements Serializable { //forgot this implementation

    B(){
    }

}
于 2021-11-18T17:34:39.817 に答える
0

1- Serializable クラスを実装していない android.graphics.Bitmap を使用しているため、そのクラスを削除する必要があります。

2-簡単に言うと、インテント間でデータを渡す方法にアクセスできます。

于 2020-03-28T04:46:39.740 に答える