可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I\'ve implemented my class with serializable, but it still didn\'t work.
This is my class:
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();
// }
}
This is what I want to be passing.
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);
But still it didn\'t work. I don\'t know how to use Parcelable, so I use this instead.
回答1:
Try to pass the serializable list using Bundle.Serializable:
Bundle bundle = new Bundle();
bundle.putSerializable(\"value\", all_thumbs);
intent.putExtras(bundle);
And in SomeClass Activity get it as:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<Thumbnail> thumbs=
(List<Thumbnail>)bundle.getSerializable(\"value\");
回答2:
This code may help you:
public class EN implements Serializable {
//... you don\'t need implement any methods when you implements Serializable
}
Putting data. Create new Activity with extra:
EN enumb = new EN();
Intent intent = new Intent(getActivity(), NewActivity.class);
intent.putExtra(\"en\", enumb); //second param is Serializable
startActivity(intent);
Obtaining data from new activity:
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
}
//...
回答3:
I extended ρяσѕρєя K\'s answer to make the code full and workable. So, when you finish filling your \'all_thumbs\' list, you should put its content one by one into the bundle and then into the intent:
Bundle bundle = new Bundle();
for (int i = 0; i<all_thumbs.size(); i++)
bundle.putSerializable(\"extras\"+i, all_thumbs.get(i));
intent.putExtras(bundle);
In order to get the extras from the intent, you need:
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();
Advantage of Serializable
is its simplicity. However, I would recommend you to consider using Parcelable
method when you need transfer many data, because Parcelable
is specifically designed for Android and it is more efficient than Serializable
. You can create Parcelable
class using:
- an online tool - parcelabler
- a plugin for Android Studion - Android Parcelable code generator
回答4:
Intent intent = new Intent(getApplicationContext(),SomeClass.class);
intent.putExtra(\"value\",all_thumbs);
startActivity(intent);
In SomeClass.java
Bundle b = getIntent().getExtras();
if(b != null)
thumbs = (List<Thumbnail>) b.getSerializable(\"value\");
回答5:
You need to create a Bundle and then use 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);
回答6:
Sending Data:
First make your serializable data by implement Serializable
to your data class
public class YourDataClass implements Serializable {
String someText=\"Some text\";
}
Then put it into intent
YourDataClass yourDataClass=new YourDataClass();
Intent intent = new Intent(getApplicationContext(),ReceivingActivity.class);
intent.putExtra(\"value\",yourDataClass);
startActivity(intent);
Receiving Data:
YourDataClass yourDataClass=(YourDataClass)getIntent().getSerializableExtra(\"value\");
回答7:
Create your custom object and implement Serializable. Next, you can use intent.putExtra(\"package.name.example\", <your-serializable-object>)
.
In the second activity, you read it using getIntent().getSerializableExtra(\"package.name.example\")
Otherwise, follow this and this page.
回答8:
In kotlin:
Object class implements Serializable:
class MyClass: Serializable {
//members
}
At the point where the object sending:
val fragment = UserDetailFragment()
val bundle = Bundle()
bundle.putSerializable(\"key\", myObject)
fragment.arguments = bundle
At the fragment, where we want to get our object:
val bundle: Bundle? = arguments
bundle?.let {
val myObject = it.getSerializable(\"key\") as MyClass
myObject.memberName?.let { it1 -> showShortToast(it1) }
}