文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍

2022-06-06 05:18

关注

Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍

今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:

第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  > 
<TextView  
  android:layout_width="fill_parent"  
  android:layout_height="wrap_content"  
  android:text="Welcome to Mr wei's blog." 
  /> 
<Button 
  android:id="@+id/button1" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="Serializable" 
/> 
<Button 
  android:id="@+id/button2" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content" 
  android:text="Parcelable" 
/> 
</LinearLayout>  

第三步:新建两个类一个是Person.java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下:

Person.java:


package com.tutor.objecttran; 
import java.io.Serializable; 
public class Person implements Serializable { 
  private static final long serialVersionUID = -7060210544600464481L;  
  private String name; 
  private int age; 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public int getAge() { 
    return age; 
  } 
  public void setAge(int age) { 
    this.age = age; 
  } 
} 

Book.java:


package com.tutor.objecttran; 
import android.os.Parcel; 
import android.os.Parcelable; 
public class Book implements Parcelable { 
  private String bookName; 
  private String author; 
  private int publishTime; 
  public String getBookName() { 
    return bookName; 
  } 
  public void setBookName(String bookName) { 
    this.bookName = bookName; 
  } 
  public String getAuthor() { 
    return author; 
  } 
  public void setAuthor(String author) { 
    this.author = author; 
  } 
  public int getPublishTime() { 
    return publishTime; 
  } 
  public void setPublishTime(int publishTime) { 
    this.publishTime = publishTime; 
  } 
  public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { 
    public Book createFromParcel(Parcel source) { 
      Book mBook = new Book(); 
      mBook.bookName = source.readString(); 
      mBook.author = source.readString(); 
      mBook.publishTime = source.readInt(); 
      return mBook; 
    } 
    public Book[] newArray(int size) { 
      return new Book[size]; 
    } 
  }; 
  public int describeContents() { 
    return 0; 
  } 
  public void writeToParcel(Parcel parcel, int flags) { 
    parcel.writeString(bookName); 
    parcel.writeString(author); 
    parcel.writeInt(publishTime); 
  } 
} 

第四步:修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:

ObjectTranDemo.java:


package com.tutor.objecttran; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
public class ObjectTranDemo extends Activity implements OnClickListener { 
  private Button sButton,pButton; 
  public final static String SER_KEY = "com.tutor.objecttran.ser"; 
  public final static String PAR_KEY = "com.tutor.objecttran.par"; 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   
    setupViews(); 
  } 
  //我的一贯作风呵呵 
  public void setupViews(){ 
    sButton = (Button)findViewById(R.id.button1); 
    pButton = (Button)findViewById(R.id.button2); 
    sButton.setOnClickListener(this); 
    pButton.setOnClickListener(this); 
  } 
  //Serializeable传递对象的方法 
  public void SerializeMethod(){ 
    Person mPerson = new Person(); 
    mPerson.setName("frankie"); 
    mPerson.setAge(25); 
    Intent mIntent = new Intent(this,ObjectTranDemo1.class); 
    Bundle mBundle = new Bundle(); 
    mBundle.putSerializable(SER_KEY,mPerson); 
    mIntent.putExtras(mBundle); 
    startActivity(mIntent); 
  } 
  //Pacelable传递对象方法 
  public void PacelableMethod(){ 
    Book mBook = new Book(); 
    mBook.setBookName("Android Tutor"); 
    mBook.setAuthor("Frankie"); 
    mBook.setPublishTime(2010); 
    Intent mIntent = new Intent(this,ObjectTranDemo2.class); 
    Bundle mBundle = new Bundle(); 
    mBundle.putParcelable(PAR_KEY, mBook); 
    mIntent.putExtras(mBundle); 
    startActivity(mIntent); 
  } 
  //铵钮点击事件响应 
  public void onClick(View v) { 
    if(v == sButton){ 
      SerializeMethod(); 
    }else{ 
      PacelableMethod(); 
    } 
  } 
} 

ObjectTranDemo1.java:


package com.tutor.objecttran; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class ObjectTranDemo1 extends Activity { 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView mTextView = new TextView(this); 
    Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY); 
    mTextView.setText("You name is: " + mPerson.getName() + "/n"+ 
        "You age is: " + mPerson.getAge()); 
    setContentView(mTextView); 
  } 
} 

ObjectTranDemo2.java:


package com.tutor.objecttran; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class ObjectTranDemo2 extends Activity { 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView mTextView = new TextView(this); 
    Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY); 
    mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+ 
             "Author is: " + mBook.getAuthor() + "/n" + 
             "PublishTime is: " + mBook.getPublishTime()); 
    setContentView(mTextView); 
  } 
} 

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
   package="com.tutor.objecttran" 
   android:versionCode="1" 
   android:versionName="1.0"> 
  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".ObjectTranDemo" 
         android:label="@string/app_name"> 
      <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    <activity android:name=".ObjectTranDemo1"></activity> 
    <activity android:name=".ObjectTranDemo2"></activity> 
  </application> 
  <uses-sdk android:minSdkVersion="7" /> 
</manifest>  

第六步:运行上述工程查看效果图啦:

效果1:首界面:

效果2:点击Serializable按钮

效果3:点击Parcelable按钮:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Android Parcelable与Serializable详解及区别Android中Serializable和Parcelable序列化对象详解Android中Intent传递对象的两种方法Serializable,ParcelableAndroid中使用Intent在Activity之间传递对象(使用Serializable或者Parcelable)的方法Android序列化之Parcelable和Serializable的使用详解


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯