2016-04-04 10 views
3

Ich versuche, eine Android Wear App zu entwickeln und ein Asset von der mobilen Helfer Aktivität übergeben. Ich habe das offizielle Dokument zum Übergeben von Assets - Transferring Assets - gelesen, erhalte jedoch den folgenden Fehler, wenn ich versuche, ein Bitmap aus dem Asset zu laden, das in der onDataChanged-Funktion übergeben wurde. Beachten Sie, dass der Code funktioniert, wenn String Werte übergeben werden. Der Code lautet wie folgt:IllegalStateException beim Aufrufen von blockingConnect in Verschleiß Service

public Bitmap loadBitmapFromAsset(Bitmap bitmap, Asset asset) { 
    if (asset == null) { 
     throw new IllegalArgumentException("Asset must be non-null"); 
    } 

    ConnectionResult result = mGoogleApiClient.blockingConnect(5000, TimeUnit.MILLISECONDS); 
    if (!result.isSuccess()) { 
     return null; 
    } 

    InputStream assetInputStream = Wearable.DataApi.getFdForAsset(mGoogleApiClient, asset).await().getInputStream(); 
    mGoogleApiClient.disconnect(); 

    if (assetInputStream == null) { 
     return null; 
    } 

    if (bitmap != null) { 
     bitmap.recycle(); 
     bitmap = null; 
    } 

    bitmap = BitmapFactory.decodeStream(assetInputStream); 
    return bitmap; 
} 

Der Fehler, den ich bekommen habe ist folgendes:

java.lang.IllegalStateException: blockingConnect darf nicht auf dem UI-Thread bei com.google.android aufgerufen werden .gms.common.internal.zzx.zza (Unknown Source) bei com.google.android.gms.common.api.internal.zzj.blockingConnect (Unknown Source) ...

Alle auf Ideen was ist causi? ng dies?

Antwort

5

Die Lösung war schließlich, die loadBitmapFromAsset in einem ausführbaren ausführen. Ich verstehe nicht, warum ich das vorher nicht herausgefunden habe ... Ich habe keinen ähnlichen Beitrag gefunden, also hoffentlich wird es jemandem helfen.

new Thread(new Runnable() { 
    @Override 
    public void run() { 
    ... 
    } 
}).start(); 
0

Die Fehlermeldung bedeutet genau das, was sie sagt: Sie können GoogleApiClient.blockingConnect nicht auf dem UI-Thread Ihrer Anwendung aufrufen. Sie müssen einen Rückruf einrichten, bevor Sie eine Verbindung zu GoogleApiClient herstellen, und dann Ihre Verarbeitung im Rückruf onConnected durchführen.

Es gibt ein schönes Beispiel dafür bei http://developer.android.com/training/wearables/data-layer/accessing.html. Der Teil, den Sie verpassen, befindet sich innerhalb des addConnectionCallbacks Aufrufs.

+0

Danke aber das ist was ich mache. Der Überwachungsdienst implementiert die folgenden Funktionen, DataApi.DataListener, GoogleApiClient.ConnectionCallbacks und GoogleApiClient.OnConnectionFailedListener. Das Problem tritt auf, wenn die onDataChanged-Funktion aufgerufen wird (nachdem einige Einstellungen in der mobilen Companion-App geändert wurden) und ich versuche, Bitmap aus dem übergebenen Asset zu laden. Die Funktion, die ich verwende, ist die gleiche Funktion (loadBitmapFromAsset) aus der zugehörigen Dokumentation: http://developer.android.com/intl/ru/training/ wearables/data- layer/assets.html – user501223

Verwandte Themen