• Android剪切板传递数据传递序列化对象数据


    一、剪切板的使用介绍

      1. 剪切板对象的创建  

      使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象。 
      2. 对象调用的主要方法介绍  

      在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。  
      3. 使用该方法的步骤
      主要步骤: 
        (1) 通过getSystemService获取ClipboardManager对象cm;
        (2) 使用cm.setPrimaryClip()方法设置ClipData数据对象;
        (3) 在新Activity中获取ClipboardManager对象cm;
        (4) 使用cm.getPrimaryClip()方法获取剪切板的ClipData数据对象: cd;
        (5) 通过cd.getItemAt(0)获取到传递进来的数据。 

    //------------------------------------废话不多直接上代码,首先给出的是API11以后的剪切板传递数据方法

     1 /*
     2  *使用剪切板传递数据 
     3  */
     4 public class MainActivity extends Activity {
     5 
     6     private Button button;
     7 
     8     @SuppressLint("NewApi")
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.activity_main);
    13         button = (Button) findViewById(R.id.button);
    14         button.setOnClickListener(new View.OnClickListener() {
    15             @SuppressLint("NewApi")
    16             @Override
    17             public void onClick(View v) {
    18                 MyData myData = new MyData("java", 23);
    19                 // 将对象转换成字符串,
    20                 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    21                 String base64String = "";
    22 
    23                 try {
    24                     ObjectOutputStream objectOutputStream = new ObjectOutputStream(
    25                             byteArrayOutputStream);
    26                     objectOutputStream.writeObject((myData));
    27                     // 使用Android工具类Base64
    28                     base64String = Base64.encodeToString(
    29                             byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
    30                     objectOutputStream.close();
    31                 } catch (IOException e) {
    32                     // TODO Auto-generated catch block
    33                     e.printStackTrace();
    34                 }
    35 
    36                 // 使用剪切板在API11以后的版本
    37                 ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    38                 cm.setPrimaryClip(ClipData.newPlainText("java", base64String));
    39                 Intent intent = new Intent(MainActivity.this,
    40                         OtherActivity.class);
    41                 startActivity(intent);
    42             }
    43         });
    44     }
    45 
    46 }

    //----------------------------------------

    主要步骤: 
    创建一个实现了Serializable接口的类MyData。 
    存入数据:获取ClipboardManager,并对通过Base64类对MyData对象进行序列化,再存入剪切板中。 
    取出数据:在新Activity中,获取ClipboardManager,对被序列化的数据进行反序列化,同样使用Base64类。然后对反序列化的数据进行处理。 

     1 import java.io.Serializable;
     2 
     3 public class MyData implements Serializable {
     4     private String name;
     5     private int age;
     6 
     7     public MyData(String name, int age) {
     8         super();
     9         this.name = name;
    10         this.age = age;
    11     }
    12 
    13     public String getName() {
    14         return name;
    15     }
    16 
    17     public void setName(String name) {
    18         this.name = name;
    19     }
    20 
    21     public int getAge() {
    22         return age;
    23     }
    24 
    25     public void setAge(int age) {
    26         this.age = age;
    27     }
    28 
    29     @Override
    30     public String toString() {
    31         return "MyData [name=" + name + ", age=" + age + "]";
    32     }
    33 
    34 }

    //-----------------------------

    //目的地activity,

     1 @SuppressLint("NewApi")
     2 public class OtherActivity extends Activity {
     3 
     4     private TextView textView;
     5 
     6     @SuppressLint("NewApi")
     7     @Override
     8     protected void onCreate(Bundle savedInstanceState) {
     9         // TODO Auto-generated method stub
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.other);
    12         textView = (TextView) findViewById(R.id.msg);
    13         // 获取剪切板对象
    14         ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    15         ClipData clipData = cm.getPrimaryClip();
    16         // getItemAt()方法获取clipData对象中的Item,然后通过Item的getText()方法获取里面的数据。
    17         String msg = clipData.getItemAt(0).getText().toString();
    18         // 有了数据之后通过反序列化将数据变为对象显示出来即可
    19         byte[] base64_btye = Base64.decode(msg, Base64.DEFAULT);
    20         ByteArrayInputStream bais = new ByteArrayInputStream(base64_btye);
    21         try {
    22             ObjectInputStream ois = new ObjectInputStream(bais);
    23             MyData myData = (MyData) ois.readObject();
    24             textView.setText(myData.toString());
    25         } catch (Exception e) {
    26             // TODO Auto-generated catch block
    27             e.printStackTrace();
    28         }
    29 
    30     }
    31 }

    //=============================

    //下面在贴出来一个以前版本的剪切板数据传递,使用的仍然是上面的MyData类

     1 /*
     2  *使用剪切板传递数据 
     3  */
     4 public class MainActivity extends Activity {
     5 
     6     private Button button;
     7 
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.activity_main);
    12         button = (Button) findViewById(R.id.button);
    13         button.setOnClickListener(new View.OnClickListener() {
    14             @Override
    15             public void onClick(View v) {
    16                 MyData myData = new MyData("java", 23);
    17                 // 将对象转换成字符串
    18                 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    19                 String base64String = "";
    20 
    21                 try {
    22                     ObjectOutputStream objectOutputStream = new ObjectOutputStream(
    23                             byteArrayOutputStream);
    24                     objectOutputStream.writeObject((myData));
    25                     // 使用Android工具类Base64
    26                     base64String = Base64.encodeToString(
    27                             byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
    28                     objectOutputStream.close();
    29                 } catch (IOException e) {
    30                     // TODO Auto-generated catch block
    31                     e.printStackTrace();
    32                 }
    33 
    34                 // 使用剪切板
    35                 ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    36                 clipboardManager.setText(base64String);
    37                 Intent intent = new Intent(MainActivity.this,OtherActivity.class);
    38                 startActivity(intent);
    39             }
    40         });
    41     }
    42 
    43 }

    //----------------------------

     1 public class OtherActivity extends Activity {
     2 
     3     private TextView textView;
     4 
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         // TODO Auto-generated method stub
     8         super.onCreate(savedInstanceState);
     9         setContentView(R.layout.other);
    10         textView = (TextView) findViewById(R.id.msg);
    11         // 获取剪切板对象
    12         ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    13         String name = clipboardManager.getText().toString();
    14         // 将得到的数据还原为字节数组
    15         byte[] base64_byte = Base64.decode(name, Base64.DEFAULT);
    16         ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
    17                 base64_byte);
    18         try {
    19             ObjectInputStream objectInputStream = new ObjectInputStream(
    20                     byteArrayInputStream);
    21             MyData myData = (MyData) objectInputStream.readObject();
    22             textView.setText(myData.toString());
    23         } catch (Exception e) {
    24             // TODO Auto-generated catch block
    25             e.printStackTrace();
    26         }
    27 
    28 
    29     }
    30 }

    public class OtherActivity extends Activity {
    private TextView textView;
    @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView) findViewById(R.id.msg);// 获取剪切板对象ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);String name = clipboardManager.getText().toString();// 将得到的数据还原为字节数组byte[] base64_byte = Base64.decode(name, Base64.DEFAULT);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);try {ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);MyData myData = (MyData) objectInputStream.readObject();textView.setText(myData.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}

    }}

  • 相关阅读:
    如何修改运行中的docker容器的端口映射和挂载目录
    kubernetes集群应用部署实例
    linux centos7磁盘格式化挂载之parted
    mysql授权用户,撤销用户,撤销权限基本操作
    MySQL数据库基础备份
    实现Kubernetes跨集群服务应用的高可用
    使用Harbor配置Kubernetes私有镜像仓库
    kubernetes1.5新特性(二):支持Photon卷插件
    kubernetes1.4新特性(一):支持sysctl命令
    说说我心中的Linux系统
  • 原文地址:https://www.cnblogs.com/fuck1/p/5459660.html
Copyright © 2020-2023  润新知