2016-03-17 2 views
1

Я послал данные мобильного носить, какПолучить данные уже отправленные из КПК носить

private static final String IMAGE_PATH = "/image"; 
    private static final String IMAGE_TITLE = "imageTitle"; 
    private static final String IMAGE_TO_SEND = "image"; 


    PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(IMAGE_PATH); 
    putDataMapRequest.getDataMap().putString(IMAGE_TITLE, "hi this handheld"); 
    PutDataRequest putDataRequest = putDataMapRequest.asPutDataRequest(); 
    putDataRequest.setUrgent(); 
    Wearable.DataApi.putDataItem(googleApiClient, putDataRequest).setResultCallback(new ResultCallback<DataApi.DataItemResult>() { 
     @Override 
     public void onResult(@NonNull DataApi.DataItemResult dataItemResult) { 
      if (dataItemResult.getStatus().isSuccess()) { 

      } else { 

      } 
     } 
    }); 

На стороне износа я хочу сначала проверить, если данные уже отправлены или нет. Если данные уже отправлены, то я хочу использовать эти данные, иначе я хочу запросить данные для мобильных устройств:

Я сделал это, но он всегда терпит неудачу. Мой код выглядит следующим образом:

Wearable.NodeApi.getLocalNode(googleApiClient).setResultCallback(new ResultCallback<NodeApi.GetLocalNodeResult>() { 
      @Override 
      public void onResult(@NonNull NodeApi.GetLocalNodeResult getLocalNodeResult) { 
       Uri uri = new Uri.Builder() 
         .scheme(PutDataRequest.WEAR_URI_SCHEME) 
         .path(IMAGE_PATH) 
         .authority(getLocalNodeResult.getNode().getId()) 
         .build(); 

       Wearable.DataApi.getDataItem(googleApiClient, uri).setResultCallback(new ResultCallback<DataApi.DataItemResult>() { 
        @Override 
        public void onResult(@NonNull DataApi.DataItemResult dataItemResult) { 
         if (dataItemResult.getStatus().isSuccess() && dataItemResult.getDataItem() != null) { 
          Log.d(TAG, "onResult: success result"); 
          DataMap dataMap = DataMap.fromByteArray(dataItemResult.getDataItem().getData()); 

         } else { 

         } 
        } 
       }); 
      } 
     }); 

ответ

1

я нашел решение. Я проверял данные, получая локальные узлы id, так что он предоставлял нулевые данные. Идентификатор идентификатора i-e идентификатора моего часового узла, идентификатор узла должен быть идентификатором узла, который отправил данные с использованием Data Layer Api. В моем случае сначала мой карманный компьютер отправляет данные через Data Layer Api, и мои данные проверки часов существуют или нет. Если найденные данные получают данные, в противном случае отправить запрос в Handheld.

Wearable.NodeApi.getConnectedNodes(googleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { 
       @Override 
       public void onResult(NodeApi.GetConnectedNodesResult nodes) { 
        for (Node node : nodes.getNodes()) { 
         connectedNode = node; 
        } 

        Uri uri = new Uri.Builder() 
          .scheme(PutDataRequest.WEAR_URI_SCHEME) 
          .path(IMAGE_PATH) 
          .authority(connectedNode.getId()) //id which has sent data 
          .build(); 

        Wearable.DataApi.getDataItem(googleApiClient, uri).setResultCallback(new ResultCallback<DataApi.DataItemResult>() { 
         @Override 
         public void onResult(@NonNull DataApi.DataItemResult dataItemResult) { 
          if (dataItemResult.getStatus().isSuccess() && dataItemResult.getDataItem() != null) { 
           Log.d(TAG, "onResult: successfully got previous data"); 
          } else { 
           makeRequestToSendData(); 
           Log.d(TAG, "onResult: failed to got previous data");//request handheld to get data using **Message API** 
          } 
         } 
        }); 

       } 
      }); 

Мы должны изменить getLocalNode к getConnectedNodes.

0

Ваш код выглядит хорошо, идентификатор узла не равен нулю?

Не удается ли получить обратный вызов результата getDataItem?

Чтобы получить DataMap от DataItemResult, используйте этот код:

DataItem dataItem = dataItemResult.getDataItem(); 
if (dataItem != null) { 
     DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap(); 

} 
+0

идентификатор узла не равен нулю. он не работает в результате getDataItem. callback.dataItem всегда имеет значение null. –

+0

@ Kapouter Я не нашел никакой разницы между вашим ответом и сообщением. Код тот же, что и запрос из ссылки blogspot, указанной в ответе. – surhidamatya

+1

У вас есть одинаковые имена пакетов между мобильными и модульными модулями? Правильно ли подключен GoogleApiClient? – Kapouter

Смежные вопросы