2014-07-06 19 views
14

Android tutorial'da açıklandığı gibi Giyilebilir Veri Katmanı Api test ediyorum.PutDataMapRequest'i kullandıktan sonra Uri for Wearable.DataApi.getDataItem() yöntemi nedir?

var yük olarak sadece bir bayt dizisi olabilir DataItem yaklaşık göre düşük bir seviyede API, yani eğitim Amaçları kullanırken Bundle (yani, bir seri harita), temel olarak eşdeğer olduğu gibi görünüyor, PutDataMapRequest kullanılmasını önerir. Temel olarak bu sınıfın bir örneğini yaratır, sonra değerleri doldurur ve gönderirsiniz.

private final static String DATA_PATH = "/testdata"; 

PutDataMapRequest dataMap = PutDataMapRequest.create(DATA_PATH); 
dataMap.getDataMap().putInt(...); 

PutDataRequest request = dataMap.asPutDataRequest(); 
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi.putDataItem(mGoogleApiClient, request); 
pendingResult.setResultCallback(...); 

Şimdi, bu verileri (el kendisinde, şu anda giyilebilir endişelendirmiyor, test için) düzgün saklandı olmadığını kontrol etmek istiyorum. Bunun için uygun yöntemler DataApi sınıfında, bu yüzden arayabilirsiniz: o zaman

PendingResult<DataApi.DataItemResult> pending; 
pending = Wearable.DataApi.getDataItem(mGoogleApiClient, uri); 
pending.setResultCallback(...); 

ve değeri almak için geri arama içeride DataMapItem.fromDataItem() kullanın.

Sorun şu ki: DataItemResult'ı istemek için gerçek URI nedir?

Ben Wearable.DataApi.getDataItems(mGoogleApiClient) kullanırsanız üzerinde tüm saklanan verileri yineleme çünkü veriler saklanır, gerçekten de var ve Uri geçerli:

"wear://<some guid here>/testdata" 

Ve kullanarak bu Uri DataApi.getDataItem() döndürür doğru sonuç ile . Ama sadece PutDataRequest ...

oluşturmak için /testdata bölümünü kullandığından beri , bunu oluşturmak için clueless olarak nasıl olduğumu Ya yanlış şeyler yapıyorum? (Yazınıza burada > < gibi bazı guıd anlatılmıştır)

cevap

23

Uri otoritesi Düğüm API üzerinden ulaşılabilir Düğüm Kimliği olduğunu. Özet olarak Uri'yi aşağıdaki gibi oluşturabilirsiniz.

private Uri getUriForDataItem() { 
    // If you've put data on the local node 
    String nodeId = getLocalNodeId(); 
    // Or if you've put data on the remote node 
    // String nodeId = getRemoteNodeId(); 
    // Or If you already know the node id 
    // String nodeId = "some_node_id"; 
    return new Uri.Builder().scheme(PutDataRequest.WEAR_URI_SCHEME).authority(nodeId).path("/path_to_data").build(); 
} 

private String getLocalNodeId() { 
    NodeApi.GetLocalNodeResult nodeResult = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await(); 
    return nodeResult.getNode().getId(); 
} 

private String getRemoteNodeId() { 
    HashSet<String> results = new HashSet<String>(); 
    NodeApi.GetConnectedNodesResult nodesResult = 
      Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); 
    List<Node> nodes = nodesResult.getNodes(); 
    if (nodes.size() > 0) { 
     return nodes.get(0).getId(); 
    } 
    return null; 
} 
+0

Mükemmel! Bunu görmemiştim. Ve her bağlı cihazın kendi düğüm kimliğine sahip olduğunu mu varsayıyorum? – matiash

+0

Evet öyle. Bu videoda da node id ve item url'den biraz bahsedilmiştir. https://www.google.com/events/io/schedule/session/9bf77f55-afbe-e311-b297-00155d5066d7 – Poly

+0

Evet, cevabınızı okuduktan sonra videoyu gördüm. Tekrar teşekkürler! – matiash