Transmission de données par intention à l’aide de Serializable

J’ai implémenté ma classe avec sérialisable, mais cela n’a toujours pas fonctionné.

Ceci est ma classe:

package com.ursabyte.thumbnail; import java.io.Serializable; import android.graphics.Bitmap; public class Thumbnail implements Serializable { private static final long serialVersionUID = 1L; private Ssortingng label = ""; private Bitmap bitmap; public Thumbnail(Ssortingng label, Bitmap bitmap) { this.label = label; this.bitmap = bitmap; } public void set_label(Ssortingng label) { this.label = label; } public Ssortingng 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(); // } } 

C’est ce que je veux passer.

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

Mais cela n’a toujours pas fonctionné. Je ne sais pas comment utiliser Parcelable, alors je l’utilise plutôt.

Essayez de passer la liste sérialisable en utilisant Bundle.Serializable :

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

Et dans SomeClass Activity, obtenez-le comme:

 Intent intent = this.getIntent(); Bundle bundle = intent.getExtras(); List thumbs= (List)bundle.getSerializable("value"); 

Ce code peut vous aider:

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

Mettre des données. Créer une nouvelle activité avec en plus:

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

Obtention de données d’une nouvelle activité:

 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 } //... 

J’ai étendu la réponse de ρяσѕρєя K pour en faire un code complet et réalisable. Ainsi, lorsque vous avez fini de remplir votre liste “all_thumbs”, vous devez placer son contenu un par un dans le bundle, puis dans l’intention:

 Bundle bundle = new Bundle(); for (int i = 0; i 

Afin d'obtenir les extras de l'intention, vous avez besoin de:

 Bundle bundle = new Bundle(); List thumbnailObjects = new ArrayList(); // collect your Thumbnail objects for (Ssortingng 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: Ssortingng label = thumbnailObjects.get(2).get_label(); 

L'avantage de Serializable est sa simplicité. Cependant, je vous recommande d'utiliser la méthode Parcelable lorsque vous devez transférer beaucoup de données, car Parcelable est spécifiquement conçu pour Android et qu'il est plus efficace que Serializable . Vous pouvez créer Parcelable classe Parcelable utilisant:

  1. un outil en ligne - parcelabler
  2. un plugin pour Android Studion - Générateur de code Android Parcelable
 Intent intent = new Intent(getApplicationContext(),SomeClass.class); intent.putExtra("value",all_thumbs); startActivity(intent); 

Dans SomeClass.java

 Bundle b = getIntent().getExtras(); if(b != null) thumbs = (List) b.getSerializable("value"); 

Vous devez créer un ensemble, puis utiliser putSerializable :

 List all_thumbs = new ArrayList(); all_thumbs.add(new Thumbnail(ssortingng,bitmap)); Intent intent = new Intent(getApplicationContext(),SomeClass.class); Bundle extras = new Bundle(); extras.putSerializable("value",all_thumbs); intent.putExtras(extras); 

Créez votre object personnalisé et implémentez Serializable. Ensuite, vous pouvez utiliser intent.putExtra("package.name.example", ) .

Dans la deuxième activité, vous le lisez en utilisant getIntent().getSerializableExtra("package.name.example")

Sinon, suivez ceci et cette page.

Envoi de données:

Commencez par rendre vos données sérialisables par outil Serializable dans votre classe de données

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

Puis mettez-le dans l’intention

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

Réception de données:

 YourDataClass yourDataClass=(YourDataClass)getIntent().getSerializableExtra("value"); 

Dans kotlin : La classe d’objects implémente Serializable:

 class MyClass: Serializable { //members } 

Au point où l’object envoie:

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

Au fragment, où nous voulons obtenir notre object:

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