web-dev-qa-db-ja.com

Serializableを使用してインテントを介してデータを渡す

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

これは私のクラスです:

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の使用方法がわからないため、代わりにこれを使用します。

63
Bias Tegaralaga

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");
144

このコードはあなたを助けるかもしれません:

public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}

データの入力追加で新しいアクティビティを作成:

EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra("en", enumb); //second param is Serializable
startActivity(intent);

データの取得新しいアクティビティから:

public class NewActivity extends Activity {

    private EN en;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        try {
            super.onCreate(savedInstanceState);

            Bundle extras = getIntent().getExtras();
            if (extras != null) {
                en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data 
            }
//...
12
Yuliia Ashomok

Ρяσѕρєя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はAndroid用に特別に設計されており、Parcelableよりも効率的であるため、多くのデータを転送する必要がある場合はSerializableメソッドの使用を検討することをお勧めします。 。次を使用してParcelableクラスを作成できます。

  1. オンラインツール-parcelabler
  2. Android St​​udionのプラグイン-Android Parcelable code generator
6
Ayaz Alifov

送信データ:

まず、データクラスにSerializableを実装して、シリアル化可能なデータを作成します

public class YourDataClass implements Serializable {
String someText="Some text";
}

その後、意図に入れます

YourDataClass yourDataClass=new YourDataClass();
Intent intent = new Intent(getApplicationContext(),ReceivingActivity.class);
intent.putExtra("value",yourDataClass);
startActivity(intent);

データの受信:

YourDataClass yourDataClass=(YourDataClass)getIntent().getSerializableExtra("value");
5
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");
3
Aditya Kushwaha

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);
2
EvZ

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

2番目のアクティビティでは、getIntent().getSerializableExtra("package.name.example")を使用して読み取ります

それ以外の場合は、 this および this ページに従います。

1
Janmejoy

kotlin:オブジェクトクラスはSerializableを実装します。

class MyClass: Serializable {
//members
}

オブジェクトが送信するポイントで:

val fragment = UserDetailFragment()
val bundle = Bundle()
bundle.putSerializable("key", myObject)
fragment.arguments = bundle

オブジェクトを取得したいフラグメントで:

val bundle: Bundle? = arguments
    bundle?.let {
        val myObject = it.getSerializable("key") as MyClass
        myObject.memberName?.let { it1 -> showShortToast(it1) }
    }
1
vishnu benny