Autore Topic: Errore nella ricezione di un Intent dentro un'Activity  (Letto 729 volte)

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Errore nella ricezione di un Intent dentro un'Activity
« il: 17 Gennaio 2011, 12:35:48 CET »
0
L'errore e' il seguente:
Codice: [Seleziona]
01-17 12:30:06.220: ERROR/AndroidRuntime(24706): Uncaught handler: thread main exiting due to uncaught exception
01-17 12:30:06.429: ERROR/AndroidRuntime(24706): java.lang.RuntimeException: Error receiving broadcast Intent { act=STOP_NOTIFICATION_ERROR (has extras) } in cloudsensor.csams.UserInterface.StartStop$2@43d20128
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:765)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.os.Handler.handleCallback(Handler.java:587)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.os.Looper.loop(Looper.java:123)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.app.ActivityThread.main(ActivityThread.java:4363)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at java.lang.reflect.Method.invokeNative(Native Method)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at java.lang.reflect.Method.invoke(Method.java:521)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at dalvik.system.NativeStart.main(Native Method)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@43d0ada0 is not valid; is your activity running?
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.view.ViewRoot.setView(ViewRoot.java:468)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.app.Dialog.show(Dialog.java:239)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at cloudsensor.csams.UserInterface.StartStop.showNotificationError(StartStop.java:144)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at cloudsensor.csams.UserInterface.StartStop.access$2(StartStop.java:104)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at cloudsensor.csams.UserInterface.StartStop$2.onReceive(StartStop.java:99)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:754)
01-17 12:30:06.429: ERROR/AndroidRuntime(24706):     ... 9 more

L'intent da spedire lo preparo in un service cosi:
Codice (Java): [Seleziona]
[...]
Intent bootCompleted = new Intent(CUSTOM_INTENT_ERROR);
bootCompleted.putExtra("TO_REGISTER", sensorToRegister);
bootCompleted.putExtra("NOT_REGISTRED", failedRegistrations);
bootCompleted.putExtra("INDEX_ARRAY", sensorid);
bootCompleted.putExtra("REGISTRATION_ARRAY", registrationOK);
sendBroadcast(bootCompleted);
[...]

e lo ricevo nell'Activity cosi:
Codice (Java): [Seleziona]
[...]
private final BroadcastReceiver mIntentReceiverError = new  BroadcastReceiver(){
                @Override
                public void onReceive(Context ctx, Intent intent){
                        Log.e(TAG, "INTENT RECEIVED after an ERROR boot phase end!");
                        progressDialog.dismiss();
                        showNotificationError(ctx, intent);
                        //finish();
                }
        };
[...nella onStart faccio:]
registerReceiver(mIntentReceiverError, new IntentFilter(CUSTOM_INTENT_ERROR));

Qualche suggerimento?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Errore nella ricezione di un Intent dentro un'Activity
« Risposta #1 il: 17 Gennaio 2011, 12:47:20 CET »
0
Prova ad utilizzare il metodo http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) in modo tale da accertarti che il dialog venga creato/mostrato nel thread della gui.

Inoltre sarebbe meglio che tu come context usassi la tua activity e non quello che ti viene passato dal BroadcastReceiver...
« Ultima modifica: 17 Gennaio 2011, 12:48:58 CET da Ricky` »

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Re:Errore nella ricezione di un Intent dentro un'Activity
« Risposta #2 il: 17 Gennaio 2011, 13:38:35 CET »
0
Ok, ho cambiato il context e ho usato quello dell'activity dentro cui mostro il dialog, ma l'errore persiste!

Quella funzione che mi hai suggerito, sinceramente non ho capito come usarla -_-

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Re:Errore nella ricezione di un Intent dentro un'Activity
« Risposta #3 il: 17 Gennaio 2011, 14:11:26 CET »
0
Inoltre ho notato questa cosa:
io uso un layout a tab, dove l'Activity che riceve gli intent e' uno di questi tab.
Su tale tab, non viene mai richiamato ne onStop() ne onPause() ne onDestroy()....e io dove lo deregistro il broadcastIntent??  o_O