0

私は、ウェアラブルと同期するを使用してに保存される に を保存していBitmapます。次を使用してすべての s を反復処理する場合:AssetDataItemDataItemMapDataItem

DataItemBuffer list = api.getDataItems(connection.getClient()).await()
for(DataItem item : list) {
    ...
}

それぞれのサイズを取得するにはどうすればよいAssetですか?

編集:私が使用するとき

DataMapItem dataMapItem = DataMapItem.fromDataItem(item);
Asset asset = dataMapItem.getDataMap().getAsset(BITMAP_KEY);
int size = asset.getData().length;

次のような NPE が表示されます。

null 配列の長さを取得しようとしています

Asset次を使用して配置されました:

PutDataMapRequest putRequest = PutDataMapRequest.create(path);
DataMap map = putRequest.getDataMap();

ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.flush();
Asset asset = Asset.createFromBytes(stream.toByteArray());
map.putAsset(mapKey, asset);

Wearable.DataApi.putDataItem(connection.getClient(), putRequest.asPutDataRequest());
4

2 に答える 2

3

これによると、DataApi を介してアセットを読み取る必要があります。

GoogleApiClient client = ...;
PendingResult<DataApi.GetFdForAssetResult> pendingResult = Wearable.DataApi.getFdForAsset(client, asset);
DataApi.GetFdForAssetResult assetResult = pendingResult.await();
InputStream assetInputStream = assetResult.getInputStream();

編集: サイズだけが必要な場合は、アセットに依存しないでください。送信側では、サイズを DataMap に書き込むだけです。

PutDataMapRequest putRequest = PutDataMapRequest.create(path);
DataMap map = putRequest.getDataMap();

ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
stream.flush();
byte[] byteArray = stream.toByteArray();
Asset asset = Asset.createFromBytes(byteArray);
map.putAsset(mapKey, asset);
map.putLong("dataSize", byteArray.length);

Wearable.DataApi.putDataItem(connection.getClient(), putRequest.asPutDataRequest());

サイズを読みたい場合は、次のようにします。

DataMapItem dataMapItem = DataMapItem.fromDataItem(item);
long size = dataMapItem.getDataMap().getLong("dataSize");
于 2014-08-07T16:00:06.890 に答える