Pasar datos a través de la intención de usar Serializable

Implementé mi clase con serializable, pero aún así no funcionó.

Esta es mi clase:

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(); // } } 

Esto es lo que quiero pasar.

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

Pero aún así no funcionó. No sé cómo usar Parcelable, así que uso esto en su lugar.

Intente pasar la lista serializable usando Bundle.Serializable :

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

Y en SomeClass Activity obténgalo como:

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

Este código puede ayudarte:

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

Poniendo datos. Crear nueva actividad con extra:

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

Obteniendo datos de nueva actividad:

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

Extendí la respuesta de ρяσѕρєя K para que sea un código completo y viable. Entonces, cuando termine de llenar su lista ‘all_thumbs’, debe poner su contenido uno por uno en el paquete y luego en la intención:

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

Para obtener los extras de la intención, necesita:

 Bundle bundle = new Bundle(); List thumbnailObjects = new ArrayList(); // 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(); 

La ventaja de Serializable es su simplicidad. Sin embargo, recomendaría que considere utilizar el método Parcelable cuando necesite transferir muchos datos, ya que Parcelable está específicamente diseñado para Android y es más eficiente que Serializable . Puede crear Parcelable clase Parcelable usando:

  1. una herramienta en línea - plotbler
  2. un complemento para Android Studion - Android generador de código plotble
 Intent intent = new Intent(getApplicationContext(),SomeClass.class); intent.putExtra("value",all_thumbs); startActivity(intent); 

En SomeClass.java

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

Necesita crear un paquete y luego usar putSerializable :

 List all_thumbs = new ArrayList(); 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); 

Crea tu objeto personalizado e implementa Serializable. A continuación, puede usar intent.putExtra("package.name.example", ) .

En la segunda actividad, la lee usando getIntent().getSerializableExtra("package.name.example")

De lo contrario, sigue esto y esta página.

Enviando datos:

Primero crea tus datos serializables implementando Serializable en tu clase de datos

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

Entonces ponlo en la intención

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

Recibiendo información:

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

En kotlin : la clase de objeto implementa Serializable:

 class MyClass: Serializable { //members } 

En el punto donde el objeto envía:

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

En el fragmento, donde queremos obtener nuestro objective:

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