J'ai implémenté ma classe avec serializable, 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 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();
// }
}
C'est ce que je veux faire passer.
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);
Mais ça n'a toujours pas marché. Je ne sais pas comment utiliser Parcelable, je l'utilise donc à la place.
Essayez de transmettre 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 en tant que:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<Thumbnail> thumbs=
(List<Thumbnail>)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 un extra:
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 de la 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 rendre le code complet et exploitable. Ainsi, lorsque vous avez fini de remplir votre liste "all_thumbs", vous devez en insérer le contenu un par un dans la liasse, puis dans l'intention:
Bundle bundle = new Bundle();
for (int i = 0; i<all_thumbs.size(); i++)
bundle.putSerializable("extras"+i, all_thumbs.get(i));
intent.putExtras(bundle);
Pour obtenir les extras de l'intention, il vous faut:
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();
L'avantage de Serializable
est sa simplicité. Cependant, je vous recommanderais d’envisager l’utilisation de la méthode Parcelable
lorsque vous devez transférer de nombreuses données, car Parcelable
est spécialement conçu pour Android et est plus efficace que Serializable
. Vous pouvez créer la classe Parcelable
en utilisant:
Envoi de données:
Créez d'abord vos données sérialisables en implémentant Serializable
dans votre classe de données
public class YourDataClass implements Serializable {
String someText="Some text";
}
Puis le mettre 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");
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<Thumbnail>) b.getSerializable("value");
Vous devez créer un Bundle puis utiliser 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);
Créez votre objet personnalisé et implémentez Serializable. Ensuite, vous pouvez utiliser intent.putExtra("package.name.example", <your-serializable-object>)
.
Dans la deuxième activité, vous le lisez en utilisant getIntent().getSerializableExtra("package.name.example")
Dans kotlin: La classe d'objet implémente Serializable:
class MyClass: Serializable {
//members
}
Au point où l'objet envoyant:
val fragment = UserDetailFragment()
val bundle = Bundle()
bundle.putSerializable("key", myObject)
fragment.arguments = bundle
Au fragment, où nous voulons obtenir notre objet:
val bundle: Bundle? = arguments
bundle?.let {
val myObject = it.getSerializable("key") as MyClass
myObject.memberName?.let { it1 -> showShortToast(it1) }
}