方法一、全局对象
android的全局对象类似于java web中的applican域。除非是android应用程序清除内存,否则全局对象将一直可以访问
使用:
public class MyApp extends Application{
private String userName;
//getter,setter
public void onCreate(){
setUserName("yaohuiye");
}
}
public class MainActivity extends Activity{
private MyApp myApp;
public void onCreate(){
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
myApp=(MyApp)getApplication();
myApp.setUserName("hello");
}
});
}
}
方法二、通过剪切板传递数据
使用:
public class Main {
button.onClick(){
ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String name="jack";
clip.setText(name);
Intent intent=new Intent(Main.this,OtherActivity.class);
startActivity(intent);
}
}
public class OtherActivity{
ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String s=clip.getText();
}
剪切一个对象:
public class MyData implements Serializable{
private String name;
private String age;
public MyData(String name,String age){
this.name=name;
this.age=age;
}
public void toString(){}
}
public class Main{
button.click(){
MyData data=new MyData("yaohuiye","23");
//将对象转换成字符串
ByteArrayOutputStream byteOS=new ByteArrayOutputStream();
String base64String="";
try{
ObjectOutputStream objOS=new ObjectOutputStream(byteOS);
objOS.writeObject(data);
base64String=Base64.encodeToString(byteOS.toByteArray(),Base64.DEFAULT);
objOS.close();
}catch{
}
ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText(base64String);
Intent intent=new Intent(Main.this,OtherActivity.class);
startActivity(intent);
}
}
public class OtherActivity{
ClipboardManager clip=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
String s=clip.getText().toString();
byte[] base64_byte=Base64.decode(s,Base64.DEFAULT);
ByteArrayInputStream byteIS=new ByteArrayInputStream(base64_byte);
try{
ObjectInputStream objIS=new ObjectInputStream(byteIS);
MyData data=(MyData)objIS.readObject();
txt.setText(data.toString());
}catch{}
}
方法三、使用意图
Intent是一种运行时绑定 runtime binding机制,它能在程序运行的过程中连接两个不同的组件,通过Intent,程序可以向android表达某种请求或者意愿。
android会根据意愿的内容来选择适当的组件来请求。
Intent起着一个媒体中介的作用,专门提供组件互相调用 的相关信息,实现调用者与被调用 者之间的解耦。
使用:
Intent intent=new Intent(Main.this,OtherActivity.class);
intent.putExtra("name","yaohuiye");
intent.putExtra("age",16);
startActivity(intent);
Intent intent=getIntent();
int age=intent.getIntExtra("age",0);
String name=intent.getStringExtra("name");
注意:
使用Intent可以很方便 的在不同的activity之间传递数据,但局限性是它无法传递不能序列化的对象
方法四、使用静态变量
使用:
public class Main{
button.onClick(){
Intent intent=new Intent();
intent.setClass(Main.this,OtherActivity.class);
otherActivity.age=23;
otherActivity.name="jack";
startActivity(intent);
}
}
public class OtherActivity{
public static String name;
public static int age;
}
问题:不仅要向Activity传递数据,也要从Activity中返回数据。
方法:一般是采用Intent对象的方式来返回数据,使用startActivityRorResult方法来显示Activity。
public class Main{
private final static int REQUESTCODE=1;//返回的结果码
public void onCreate(){
button.onClick(){
Intent intent=new Intent(Main.this,OtherActivity.class);
startActivityForResult(intent,REQUESTCODE);
}
}
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(resultCode==2){
if(requestCode==REQUESTCODE){
int three=data.getIntExtra("three",0);
}
}
}
}
public class OtherActivity{
public void onCreate(){
button.onClick(){
Intent intent=new Intent();
int three=Integer.parseInt(editText.getText().toString());
intent.putExtra("three",three);
setResult(2,intent);
finish();
}
}
}