2016-07-08 6 views
1

Ich liebe das Konzept der Pre-Launch-Tests, aber meine Wear-App stürzte beim Testen ab, während ich immer noch mit echten Geräten arbeitete. Vermutlich, weil an den Testgeräten keine Wear-Geräte angeschlossen sind? (Ich nehme an, sie sind nicht).Wann kann Google NodeApi.getLocalNode null zurückgeben?

Hier ist der Fehler, den ich bei einem Aufruf von GetLocalNode bekomme. Ich kann keine Dokumentation darüber finden, wann getNode null sein könnte, und ich rate nur, dass es in früheren Versionen von Play möglicherweise null ist, wenn der lokale Knoten nicht mit anderen Knoten verbunden ist.

Kann jemand dies entweder bestätigen/ablehnen oder auf den entsprechenden Code in 9.x und 8.x von Google Play Services NodeApi verweisen?

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) 

Hier der entsprechende Code ist, die auf einer der Proben genau modelliert wird:

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)); 

        } 
       } 
     ); 
    } 

By the way, es gibt keinen Vorschlag in einem der Dokumentation oder Proben, die getLocalNodeResult.getNode() konnte nie null zurückgeben :)

Antwort

2

Danke an Sterling Udell für diesen Vorschlag: das Problem tritt bei früheren Versionen von Android (5.0/5.1) oder möglicherweise Google Play (9.0), wenn Android Wear nicht installiert ist. Offenbar in späteren Versionen wird dieser Aufruf mindestens Ihren lokalen Knoten zurückgeben, verbunden oder nicht.

Verwandte Themen