4.使用剪切板传递复杂数据类型(使用了对象的序列化)
仍然是改动那两处,只是还要声明一个新的数据类型。
package com.naptung.android_global;
import java.io.Serializable;
public class MyData implements Serializable {
private String name;
private int age;
public MyData(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "MyData [name=" + name + ", age=" + 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;
}
}
MyData myData = new MyData("jack", 23);
//将对象转换成字符串
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
String base64String = "";
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(myData);
base64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
objectOutputStream.close();
} catch (Exception e) {
// TODO: handle exception
}
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText(base64String);
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
textView = (TextView)this.findViewById(R.id.msg);
ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String msgString = clipboardManager.getText().toString();
byte[] base64_byte = Base64.decode(msgString, Base64.DEFAULT);
ByteArrayInputStream byteArrayOutputStream = new ByteArrayInputStream(base64_byte);
try {
ObjectInputStream objectOutputStream = new ObjectInputStream(byteArrayOutputStream);
MyData myData = (MyData)objectOutputStream.readObject();
textView.setText(myData.toString());
} catch (Exception e) {
// TODO: handle exception
}
5.使用全局变量
1.先声明一个类MyApp,这里与上面序列化那个类不同之处在于必须继承Application类,而且必须重写onCreate方法:
package com.naptung.myapp;
import android.app.Application;
public class MyApp extends Application {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
setName("张三");
}
}
2.其他两处改动如下:
button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myApp = (MyApp)getApplication();
myApp.setName("jack");
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
}
});
private MyApp myApp;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
textView = (TextView)this.findViewById(R.id.msg);
myApp = (MyApp)getApplication();
textView.setText("----AppName---" + myApp.getName());
}
3.改动Manifest.xml文件,这里需要注意,除了加入Other之外,需要在application中写入:
android:name=".MyApp"