从Android中的Parcelable Array获取价值

时间:2012-05-01 07:36:01

标签: android parsing parcelable

我需要解析并从中获取值:

Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");

我的目标是从Parcelable []之上获取UUID。如何实现呢?

4 个答案:

答案 0 :(得分:5)

尝试这样的事情。它对我有用:

   if(BluetoothDevice.ACTION_UUID.equals(action)) {
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
     Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
     for (int i=0; i<uuidExtra.length; i++) {
       out.append("\n  Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());
     }

希望这有帮助!

答案 1 :(得分:4)

您需要迭代Parcelable [],将每个Parcelable转换为ParcelUuid并使用ParcelUuid.getUuid()来获取UUID。虽然你可以在另一个答案中使用Parcelables上的toString(),但这只会给你一个表示UUID的字符串,而不是UUID对象。

Parcelable[] uuids = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
if (uuids != null) {
    for (Parcelable parcelable : uuids) {
        ParcelUuid parcelUuid = (ParcelUuid) parcelable;
        UUID uuid = parcelUuid.getUuid();
        Log.d("ParcelUuidTest", "uuid: " + uuid);
    }       
}       

答案 2 :(得分:1)

在引用文档并说返回的对象是ParcelUuid类型时,接受的答案是正确的。但是,他没有提供与此相关的链接;这里是: BluetoothDevice.EXTRA_UUID

此外,提供的代码在两个方面是错误的;一,它没有提到与问题相同的方法,其次,它是不可比的(在这里采取一些语言自由)。要解决这两个问题,代码应为:

Parcelable[] uuidExtra = intent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");
if (uuidExtra != null) {
   for (int j=0; j<uuidExtra.length; j++) {
      ParcelUuid extraUuidParcel = (ParcelUuid)uuidExtra[j];
      // put code here
   }
}

第三,如果想要一些额外的保护(尽管通常情况下,对象应该始终是ParcelUuid),可以在for中使用以下内容:

   ParcelUuid extraUuidParcel = uuidExtra[j] instanceof ParcelUuid ? ((ParcelUuid) uuidExtra[j]) : null;
   if (extraUuidParcel != null) {
      // put code here
   }

此解决方案由Arne提供。我还不能添加评论,而且我还提供了文档页面:)

答案 3 :(得分:-2)

从文档中可以看出额外的是ParcelUuid

所以你应该使用

ParcelUuid uuidExtra intent.getParcelableExtra("android.bluetooth.device.extra.UUID");
UUID uuid = uuidExtra.getUuid();

希望有所帮助。