zoukankan      html  css  js  c++  java
  • Bundle数据传输

    重要方法
        clear():清除此Bundle映射中的所有保存的数据。
        clone():克隆当前Bundle
        containsKey(String key):返回指定key的值
        getString(String key):返回指定key的字符
        hasFileDescriptors():指示是否包含任何捆绑打包文件描述符
        isEmpty():如果这个捆绑映射为空,则返回true
        putString(String key, String value):插入一个给定key的字符串值
        readFromParcel(Parcel parcel):读取这个parcel的内容
        remove(String key):移除指定key的值
        writeToParcel(Parcel parcel, int flags):写入这个parcel的内容

    Intent消息传递

       1、直接调用putExtra()方法将信息添加到Extra属性中,然后通过调用getXXXExtra()方法进行获取即可。这种方式比较简单、直接,主要用于数据量比较少的情况下。

       例如:

    Activity1中存数据:

    Intent intent = new Intent(Activity1.this, Activity2.class);
    
    intent.putExtra("name","jack");
    
    startActivity(intent);
    
    

    Activity2中去数据:

    Intent myintent=this.getIntent();
    
    String Name=myintent.getStringExtra("name");

    2、先将数据封装到Bundle包中,Bundle可以看成是一个“键/值”映射的哈希表。当数据量比较多时,可以使用Bundle存放数据;然后通过putExtras()方法将Bundle对象添加到Extra属性中,再通过使用getExtras()方法获取存放的Bundle对象,最后读取Bundle包中的数据。这种方式是简介通过Bundle包对数据先进行封装,再进行传递,实现起来比较繁琐,因此,主要用于数据量较多的情况。

    例如:

    Activity1中:

    Intent myintent=new Intent();
    
    myintent.setClass(Activity1.this,Activity2.class);
    
    Bundle mybundle=new Bundle();
    
    mybundle.putString("name","jace");
    
    mybundle.putInt("age",40);
    
    myintent.putExtras(mybundle);
    
    Activity1.this.startActivity(myintent);
    
    

    Activity2中:

    Intent myintent=this.getIntent();
    
    bundle mybundle=myintent.getExtras();
    
    String Name=mybundle.getString("name");
    
    Int Age=mybundle.getInt("age");
    
    

     Bundle在Handler中的数据传输

    发送消息:

    //发送一个消息到Handler发送一个BluetoothChat.MESSAGE_STATE_CHANGE消息到UI线程中
            //对应BluetoothChat的mHandler
            mHandler.obtainMessage(BluetoothChat.MESSAGE_STATE_CHANGE, state, -1).sendToTarget();
    

     或

     //发送链接的设备名称到UI Activity界面
            Message msg = mHandler.obtainMessage(BluetoothChat.MESSAGE_DEVICE_NAME);
            Bundle bundle = new Bundle();
            bundle.putString(BluetoothChat.DEVICE_NAME, device.getName());
            msg.setData(bundle);
            mHandler.sendMessage(msg);
    

     或

     Message msg = myHandler.obtainMessage();
      //将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
      Bundle b = new Bundle();
      b.putInt("age", 20);
      b.putString("name", "Jhon");
      msg.setData(b);
      msg.sendToTarget();
    

     获取消息

     private final Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case MESSAGE_STATE_CHANGE:
                    if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
                    switch (msg.arg1) {
                    case BluetoothChatService.STATE_CONNECTED:
                        mTitle.setText(R.string.title_connected_to);//设置状态为已经连接
                        mTitle.append(mConnectedDeviceName);//添加设备名称 标题为链接的设备名称
                        mConversationArrayAdapter.clear();//清理聊天记录
                        break;
                    case BluetoothChatService.STATE_CONNECTING:
                        mTitle.setText(R.string.title_connecting);
                        break;
                    case BluetoothChatService.STATE_LISTEN:
                    case BluetoothChatService.STATE_NONE:
                        mTitle.setText(R.string.title_not_connected);
                        break;
                    }
                    break;
                case MESSAGE_WRITE:
                    byte[] writeBuf = (byte[]) msg.obj;
                    // construct a string from the buffer
                   //将自己写入的消息也显示到会话列表中
                    String writeMessage = new String(writeBuf);
                    mConversationArrayAdapter.add("Me:  " + writeMessage);
                    break;
                case MESSAGE_READ:
                    byte[] readBuf = (byte[]) msg.obj;
                    // construct a string from the valid bytes in the buffer
                  //取得内容并添加到聊天对话列表中
                    String readMessage = new String(readBuf, 0, msg.arg1);
                    mConversationArrayAdapter.add(mConnectedDeviceName+":  " + readMessage);
                    break;
                case MESSAGE_DEVICE_NAME:
                    // save the connected device's name
                	//保存链接的设备名称,并显示一个toast提示
                    mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
                    Toast.makeText(getApplicationContext(), "Connected to "
                                   + mConnectedDeviceName, Toast.LENGTH_SHORT).show();
                    break;
                case MESSAGE_TOAST:
                	//处理链接(发送)失败的消息
                    Toast.makeText(getApplicationContext(), msg.getData().getString(TOAST),
                                   Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        };
    

     或

    public void handleMessage(Message msg) {
       Bundle b = msg.getData();
       int age = b.getInt("age");
       String name = b.getString("name");
       System.out.println("age is " + age + ", name is" + name);
       System.out.println("Handler--->" + Thread.currentThread().getId());
       System.out.println("handlerMessage");
      }
    
  • 相关阅读:
    教你如何剖析源码
    Java 简介
    java 入门-helloWorld
    linux yum 命令
    Linux vi/vim
    Linux 磁盘管理
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux 文件基本属性
    Linux安装Mysql
  • 原文地址:https://www.cnblogs.com/qingblog/p/2565497.html
Copyright © 2011-2022 走看看