2017-04-09 3 views
1

Ich habe einen Dienst, der einige Daten aus dem Internet herunterlädt, aber wenn ich versuche, es an eine Aktivität zu übergeben, um es dem Benutzer angezeigt zu bekommen, erhalte ich den folgenden Fehler:Wie kann ich Daten anzeigen, die mit einem Dienst in einer Aktivität abgerufen wurden?

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!

// This gets populated in the server based on information from a server. 
byte[] downloadedData; 
// Instantiated downloadedData from server connection, code removed for brevity. 

// Try to start activity with downloaded data. 
Intent i = new Intent(this, MainActivity.class); 
i.putExtra("DATA", downloadedData); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 
+0

Warum ist Ihr Dienst versucht, um eine Aktivität zu starten? Sie wissen nicht, was der Benutzer im Vordergrund macht. Verwenden Sie einen Ereignisbus (z. B. den EventBus von greenrobot), um diese Daten Ihrer Benutzeroberfläche zur Verfügung zu stellen, wenn sie zufällig im Vordergrund stehen. Wenn das Ereignis ignoriert wird, kann der Dienst die Daten in einer Datei speichern und eine "Benachrichtigung" auslösen, um den Benutzer darüber zu informieren, dass die Daten bereit sind. Im Allgemeinen ist "FAILED BINDER TRANSACTION", weil Ihre "Intent" viel zu groß ist. – CommonsWare

+0

Vielen Dank für die schnelle Antwort @CommonsWare, aber was ist, wenn ich Event Bus für meine App nicht verwenden kann? –

+0

"Was ist, wenn ich den Event-Bus für meine App nicht nutzen kann?" - Warum kannst du nicht? Event-Busse arbeiten für Tausende und Abertausende von Entwicklern. – CommonsWare

Antwort

0

Versuchen

1. Register individuelle Rundfunkempfänger in Ihrer Tätigkeit

context.registerReceiver (myBroadcastReceiver, new IntentFilter ("CUSTOM_ACTION")); 
private final BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive (Context context, Intent intent) { 

     //Do something 
    } 
}; 

2. Senden Broadcast von Ihrem Service

Intent intent = new Intent ("CUSTOM_ACTION"); 
intent.putExtra("DATA", downloadedData); 
context.sendBroadcast (intent) 
+0

Danke für die Antwort, aber ich habe das gleiche Problem, ich bekomme "FAILED BINDER TRANSACTION". –

Verwandte Themen