如何使用 Bundle 传递数据?
最近在学习Android的时候,不知道 如何使用Bunndle传递对象?
我们可以通过 Serizlizable 实现。本质就是 将 自定义的对象,转化为 Serizliable 对象。
之后在用的时候 再取出来。
存数据
Void putSerializable(String key,Serializble value);
取数据:
Serializanle getSerizlizble(String key);
代码: mianActivity.java
package com.example.serilizaldemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView title;
private TextView url;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
title = (TextView)this.findViewById(R.id.title);
url = (TextView)this.findViewById(R.id.url);
button = (Button)this.findViewById(R.id.button1);
final Game game = new Game();
game.setTitle(title.getText()+"");
game.setUrl(url.getText()+"");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,SecondActiviity.class);
// 1 封装 序列化
Bundle bundle = new Bundle();
bundle.putSerializable("love", game);
intent.putExtra("game", bundle);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
secondActivity
package com.example.serilizaldemo;
import java.io.Serializable;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class SecondActiviity extends Activity {
private static final String Tag= "SecondActiviity";
public SecondActiviity() {
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Intent intent = getIntent();
Bundle bundle = intent.getBundleExtra("game");
// 2 反序列化! 取出数据。
Serializable obj = bundle.getSerializable("love");
if(obj != null && obj instanceof Game)
{
Game g = (Game)obj;
Log.i(Tag, "--url="+g.getUrl());
Log.i(Tag, "--title="+g.getTitle());
}
Log.i(Tag, "--title=");
}
}
3 Game 的可序列化
package com.example.serilizaldemo;
import java.io.Serializable;
import java.util.List;
// 实现 可序列化 实现 可续列话 接口
public class Game implements Serializable{
// 定义自己的序号
private final static long serialVersionUID = 1234567890L;
private String title;
private String url;
private long fileSize;
// private List<Go> list;
public Game() {
// TODO Auto-generated constructor stub
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
}
总结:
Bundle 如何传递 对象?
序列化与反序列化
通过序列化 封装对象。
通过反序列化 解析对象。
自定义类 如何实现 序列化?
就是实现 serializable
private final static long serialVersionUID = 1234567890L;
赠送:
基础数据 和 集合 是 可序列化的,
自定义的 类 需要实现 serializable 才可以 实现可序列化!
序列化与反序列化
通过序列化 封装对象。
通过反序列化 解析对象。
自定义类 如何实现 序列化?
就是实现 serializable
private final static long serialVersionUID = 1234567890L;
赠送:
基础数据 和 集合 是 可序列化的,
自定义的 类 需要实现 serializable 才可以 实现可序列化!