gpt4 book ai didi

android - GoogleApiClient 节点为空

转载 作者:行者123 更新时间:2023-11-29 01:30:42 25 4
gpt4 key购买 nike

我正在编写一个 Android Wear 应用,我想让可穿戴设备在点击按钮时在手机上启动一个 Intent。

为此,我首先像这样设置与 GoogleApiClient 的连接

 googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();

googleApiClient.connect();

然后在按钮上单击函数 sendMessage 运行。这是函数

private void sendMessage(){
if(mNode != null && googleApiClient != null && googleApiClient.isConnected()){
Wearable.MessageApi.sendMessage(
googleApiClient, mNode.getId(),HELLO_WORLD_WEAR_PATH, null).setResultCallback(
new ResultCallback<MessageApi.SendMessageResult>() {
@Override
public void onResult(MessageApi.SendMessageResult sendMessageResult) {
if(!sendMessageResult.getStatus().isSuccess()){
Log.e("TAG", "Failed to send message with status code: " + sendMessageResult.getStatus().getStatusCode());
}
else{
Log.e("TAG", "Success");
}
}
}
);
}
else {
Log.e("TAG","No nodes" + mNode);

}
}

问题在于该函数进入了 sendMessage 的 else 语句,这意味着 mNode 为空。 mNode 是 Node 类型的变量。

获取节点,我有这个函数

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

我已将手机与 Android Studio 中的 Android Wear 虚拟设备连接。

我在这里做错了什么?

最佳答案

当您调用 googleApiClient.connect() 时,连接需要很短的时间,并且此调用不会阻塞。因此,在进行任何进一步调用之前,您需要等待连接成功并调用 onConnected()。

接下来,当您调用 resolveNode() 时,不会立即设置 mNode 变量。 setResultCallback 稍后执行,因此在处理结果之前不应调用 sendMessage()。

因此您需要确保此处所有内容的顺序正确。

(编辑)

查看评论后,发现问题是由于与 Google Play 服务的连接失败引起的。这是因为使用的模拟器是一个旧的 API 20 设备,它有一个旧版本的 Google Play 服务。使用最新的 API 22 模拟器将解决该问题。

关于android - GoogleApiClient 节点为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324610/

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