什么时候Google NodeApi.getLocalNode会返回null?

时间:2016-07-08 16:30:26

标签: android google-play-services

我喜欢发布前测试的概念,但我的Wear应用程序在测试中一直在崩溃,同时仍在使用真实设备。这可能是因为没有磨损设备连接到测试设备? (我认为他们不是)。

这是我在调用getLocalNode时遇到的错误。我找不到任何关于何时getNode可能为null的文档,并且只是猜测在早期版本的Play中,如果本地节点未连接到任何其他节点,则它可能为null。

有人可以确认/否认这一点,还是指向Google Play服务NodeApi的9.x和8.x中的相关代码?

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String com.google.android.gms.wearable.Node.getId()' on a null object reference
    at com.pipperpublishing.refwatch.RefWatchUtil$4.onResult(RefWatchUtil.java:329)
    at com.pipperpublishing.refwatch.RefWatchUtil$4.onResult(RefWatchUtil.java:326)
    at com.google.android.gms.common.api.internal.zzb$zza.zzb(Unknown Source)
    at com.google.android.gms.common.api.internal.zzb$zza.handleMessage(Unknown Source)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6934)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

以下是在其中一个样本上密切建模的相关代码:

 public static void fetchLocalDataMap(final GoogleApiClient client,
                                         final String dataPath,
                                         final FetchLocalDataMapCallback callback) {
        Wearable.NodeApi.getLocalNode(client).setResultCallback(
                //get the local node asynchronously and then call back to get local data
                new ResultCallback<NodeApi.GetLocalNodeResult>() {
                    @Override
                    public void onResult(NodeApi.GetLocalNodeResult getLocalNodeResult) {
                        String localNode = getLocalNodeResult.getNode().getId();
                        Uri uri = new Uri.Builder()
                                .scheme("wear")
                                .path(dataPath)
                                .authority(localNode)
                                .build();
                        //get only locally created (this node's) data
                        Wearable.DataApi.getDataItem(client, uri)
                                .setResultCallback(new DataItemResultCallback(callback));

                    }
                }
        );
    }

顺便说一句,getLocalNodeResult.getNode()在任何文档或示例中都没有任何建议可以返回null:)

1 个答案:

答案 0 :(得分:2)

感谢Sterling Udell提出此建议:安装Android Wear时,早期版本的Android(5.0 / 5.1)或Google Play(9.0)可能会出现此问题。显然,在以后的版本中,此调用至少会返回您连接或未连接的本地节点。