【Android】Android中的数据传递(2)
16lz
2021-12-04
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;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "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;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();setName("张三");}}
2.其他两处改动如下:
button = (Button)this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmyApp = (MyApp)getApplication();myApp.setName("jack");Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);}});
private MyApp myApp;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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"
更多相关文章
- android Json解析——揭开json解析的神秘面纱
- 引用自定义资源需注意数据类型
- 【翻译】(26)Android如何绘画视图
- Android(安卓)Bundle类
- LayoutInflater.inflate()方法的介绍
- Android的NDK开发(3)————JNI数据类型的详解
- android(9)_数据存储与访问3_scard_login事例
- Android的NDK开发(3)————JNI数据类型的详解
- android中操纵sqlite数据库