クラスをシリアライズ可能に実装しましたが、まだ機能しませんでした。
これは私のクラスです:
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の使用方法がわからないため、代わりにこれを使用します。
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");
このコードはあなたを助けるかもしれません:
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
}
//...
Ρяσѕρєя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
クラスを作成できます。
送信データ:
まず、データクラスに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");
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");
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);
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) }
}