Frage

habe ich einen Rundfunkempfänger in der Haupttätigkeit und den Hintergrunddienst, die Broadcast-Absichten sendet. Die Anwendung stürzt jedes Mal wenn ich versuche es, und die Log zeigt die folgende Fehlermeldung ausgeführt werden:

  

10-04 13: 30: 43,218:   ERROR / Android Runtime (695):   java.lang.RuntimeException: Fehler   Empfang Broadcast Intent {   action = com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE   (Hat Extras)} in   com.client.gaitlink.GaitLink$LoginStatusReceiver@431690e8

Die Broadcast-Nachricht wird von CommunicationService Klasse in der folgenden Methode gesendet:

private void announceLoginStatus(){
    Intent intent = new Intent(LOGIN_STATUS_UPDATE);
    intent.putExtra(SERVER_MESSAGE, mServerResponseMessage);
    intent.putExtra(SESSION_STRING, mSessionString);
    sendBroadcast(intent);
}

Dabei steht

String LOGIN_STATUS_UPDATE = "com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE"

in der Haupttätigkeit ist die folgende Sendung reveiver definiert:

public class LoginStatusReceiver extends BroadcastReceiver {

        public void onReceive(Context context, Intent intent) {
            String serverMessage = intent.getStringExtra(CommunicationService.SERVER_MESSAGE);
            String sessionString = intent.getStringExtra(CommunicationService.SESSION_STRING);

            userInfo.setSessionString(sessionString);
            saveSettings();
        }
    }

und in onResume Methode registriert:

        IntentFilter loginStatusFilter;
        loginStatusFilter = new IntentFilter(CommunicationService.LOGIN_STATUS_UPDATE);
        loginStatusReceiver = new LoginStatusReceiver();
        registerReceiver(loginStatusReceiver, loginStatusFilter);

Und die Manifest-Datei enthält die folgende:

<activity android:name=".GaitLink"
              android:label="@string/app_name">
        <intent-filter>
            ...
            <action android:name="com.client.gaitlink.CommunicationService.action.LOGIN_STATUS_UPDATE" />
        </intent-filter>
    </activity>

Ich würde wirklich schätzen, wenn jemand erklären könnte, warum die Log zeigt die obige Meldung und die Anwendung abstürzt.

Danke!

War es hilfreich?

Lösung

Haben Sie weg Schritt für Schritt im Debugger genau das zu finden, wo der Absturz auftritt?

Eine Sache zu achten ist, wenn Sie irgendwelche Android Lifecycle-Ereignisse werden überschrieben, dass Sie richtig fordern die Konstrukteurs-Basisklasse, wenn notwendig.

Andere Tipps

Ich löste es durch Zugabe von intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); wenn Sie einen neuen activity starten.

Wenn nicht von einem activity gestartet, intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); benötigt wird.

Sie haben zwei Intent Filter; Sie brauchen nur einen. Wenn Sie die BroadcastReceiver über registerReceiver() registrieren, nur die IntentFilter verwenden, die der zweite Parameter zu diesem API-Aufruf ist -. Nicht auch ein <intent-filter> Element in der <activity> im Manifest setzen

Ich weiß es nicht sicher, ob das Ihr Problem ist, aber es ist sicherlich nicht helfen.

Ich bin sicher nicht, dass Sie wissen, was ich sagen will, weil mein Englisch.

ich glaube, diese Zeile Code Ursache eines Problems ist:

userInfo.setSessionString(sessionString); 

Mein Projekt war falsch, weil ich will:

int i = Integer.parseint(intent.getExtars("9"));

und Sie registrieren zweimal.

Ich glaube, Sie müssen Lebenszyklus Methode onPause() und onResume() Verfahren zur austragen verwenden und registrieren übertragen Absicht.

fand ich, dass dafür, dass die Absicht der ursprünglichen Aktivität ausgeführt wurde und setzen die Dinge in eine Klasse bekam der gesamten Ausgabe los zu werden.

Dies ist eine sehr alte Frage, aber ich denke, dass viele Menschen immer noch Antworten für sie werden gesucht. Meine Situation ist auf diese eine recht ähnlich.

Was ich tun wollte, ist finish () in der Kind-Aktivität zu nennen, wenn bestimmte Ereignisse in übergeordneter Aktivität auftreten heißt durch die Broadcast-Nachricht von MainActivity Child Aktivität zu senden.

Im Anschluss wird der Code in MainActivity, wenn das Ereignis aufgetreten ist (beispielsweise wenn die Netzwerkverbindung unterbrochen etc etc):

    Intent intent = new Intent("ACTIVITY_FINISH");
    intent.putExtra("FinishMsg","ACTIVITY_FINISH: Network broken.");
    sendBroadcast(intent);

In den Kindern Tätigkeit des onResume () Funktion:

    IntentFilter quitFilter = new IntentFilter();
    quitFilter.addAction("ACTIVITY_FINISH");
    registerReceiver(m_quitReceiver, quitFilter);

In den Kindern Tätigkeit des OnPause () Funktion:

    unregisterReceiver(m_quitReceiver);

Im Rahmen der Kinderaktivitätsklasse:

BroadcastReceiver m_quitReceiver = new BroadcastReceiver() 
{
    public void onReceive(Context context, final Intent intent) 
    {
        if (intent.getAction().equalsIgnoreCase("ACTIVITY_FINISH"))
        {
            Log.d("INFO", intent.getExtras().getString("FinishMsg"));
            finish(); // do here whatever you want
        }
    }
};

Hope, das hilft.

Ok, was für mich gearbeitet wurde erklärt, die onNotification Methode wie folgt:

    window.onNotification = function(event) {
    alert('onNotification called!');
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top