我喜欢发布前测试的概念,但我的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:)
答案 0 :(得分:2)
感谢Sterling Udell提出此建议:安装Android Wear时,早期版本的Android(5.0 / 5.1)或Google Play(9.0)可能会出现此问题。显然,在以后的版本中,此调用至少会返回您连接或未连接的本地节点。