gpt4 book ai didi

android - PendingResult.setResultCallback() 总是返回 statusCode 成功

转载 作者:行者123 更新时间:2023-11-29 01:20:57 24 4
gpt4 key购买 nike

如果我成功将我的 google watch 与移动设备连接,然后禁用蓝牙连接(出于测试原因)并向我的移动设备发出 google api 客户端调用,挂起的结果总是返回状态代码成功,即使它没有成功,因为没有更多的连接

请求的异步任务

class DataTask  extends AsyncTask<Node, Void, Void> {

@Override
protected Void doInBackground(Node... nodes) {
Gson gson = new Gson();
Request requestObject = new Request();
requestObject.setType(Constants.REQUEST_TYPE);
String jsonString = gson.toJson(requestObject);

PutDataMapRequest dataMap = PutDataMapRequest.create(Constants.PATH_REQUEST);
dataMap.setUrgent();
dataMap.getDataMap().putString(Constants.KEY_REQUEST, jsonString);
PutDataRequest request = dataMap.asPutDataRequest();
DataApi.DataItemResult dataItemResult = Wearable.DataApi
.putDataItem(googleApiClient, request).await();

boolean connected = googleApiClient.isConnected();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi.putDataItem(googleApiClient, request);
pendingResult.setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
com.google.android.gms.common.api.Status status = dataItemResult.getStatus();

DataItem dataItem = dataItemResult.getDataItem();
boolean dataValid = dataItemResult.getDataItem().isDataValid();
boolean canceled = status.isCanceled();
boolean interrupted = status.isInterrupted();
float statusCode = status.getStatusCode();


if(status.isSuccess()){ // expected to be false because there is no bluetooth connection anymore
Log.d(TAG, "Success");
}else{
Log.d(TAG, "Failure");
}
}
});
return null;
}
}

为什么我没有得到 status.isSuccess 的 false?

我找到的唯一解决方案是在 AsyncTask 中编写以下代码:

Wearable.NodeApi.getConnectedNodes(googleApiClient).await().getNodes();
if(connectedNodes.size() == 0){
// no connection
}

是否无法在 ResultCallback 中检查请求是否成功?

最佳答案

我相信 DataItemResultgetStatus() 调用只是表明调用是否成功传递给数据 API,不是是否成功转发到另一个节点。数据 API 是异步的 - 它是一种“存储和转发”架构 - 因此期望它立即通知您成功交付是不合理的。

事实上,我不认为有一种方法可以从数据 API 确定您的 DataItem 何时交付根本。您的 getConnectedNodes 技术只是告诉您 watch 已连接,而不是数据已发送。如果您需要交付证明,您可能必须自己实现,或许可以使用 Message API。

另一个注意事项:如果您已将代码包装在 AsyncTask 中,则无需使用 PendingResult.setResultCallback。您可以简单地 await 结果内联:http://developer.android.com/training/wearables/data-layer/events.html#sync-waiting

关于android - PendingResult.setResultCallback() 总是返回 statusCode 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36837495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com