2017-03-14 4 views
0

ich einen Alarm App entwickle und ich versuche, für die Einrichtung eines AlarmPassing Reich Objekt zu einem anstehenden Absicht Alarmmanager

Bedingt durch das Reich Objekt Alarmmanager weitergeben müssen: java.lang.RuntimeException: Parcel begegnet IOException Schreiben serialisierbares Objekt (name = io.realm.AlarmRealmProxy) bei android.os.Parcel.writeSerializable (Parcel.java:1527) bei android.os.Parcel.writeValue (Parcel.java:1475) bei android .os.Parcel.writeArrayMapInternal (Parcel.java:724) bei android.os.BaseBundle.writeToParcelInner (BaseBundle.java:1408) bei android.os.Bundle.writeToParcel (Bundle.java:1157) bei android.os.Parcel.writeBundle (Parcel.java:764) bei android.content.Intent.writeToParcel (Intent.java:8687) bei android.os.Parcel.writeTypedArray (Parcel.java:1307) bei android.app.ActivityManagerProxy.getIntentSender (ActivityManagerNative.java:4653) bei android.app.PendingIntent.getBroadcastAsUser (PendingIntent.java:562) bei android. app.PendingIntent.getBroadcast (PendingIntent.java:545) bei in.kka.physiotherapy.model.Alarm.schedule (Alarm.java:143) bei in.kka.physiotherapy.service.A larmService.onStartCommand (AlarmService.java:99) bei android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3326) bei android.app.ActivityThread.-wrap21 (ActivityThread.java) bei android.app.ActivityThread $ H .handleMessage (ActivityThread.java:1582) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:6119) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) Verursacht durch: java.io.NotSerializableException: io.realm.AlarmRealmProxy $ AlarmColumnInfo bei java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java : 1224) bei java.io.ObjectOutputStream.defaultWriteFields (ObjectOutputStream.java:1584) bei java.io.ObjectOutputStream.writeSerialData (ObjectOutputStream.java:1549) bei java.io.ObjectOutputStream.writeOrdinaryObject (ObjectOutputStream.java:1472) bei java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1218) bei java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:346) bei android.os.Parcel.writeSerializable (Parcel.java:1522) bei android.os.Parcel.writeValue (Parcel.java:1475) bei android.os.Parcel.writeArrayMapInternal (Parcel.java:724) bei android.os.BaseBundle.writeToParcelInner (BaseBundle.java:1408) bei android.os.Bundle.writeToParcel (Bundle.java:1157) bei android.os.Parcel.writeBundle (Parcel.java:764) bei android. content.Intent.writeToParcel (Intent.java:8687) bei android.os.Parcel.writeTypedArray (Parcel.java:1307) bei android.app.ActivityManagerProxy.getIntentSender (ActivityManagerNative .java: 4653) bei android.app.PendingIntent.getBroadcastAsUser (PendingIntent.java:562) bei android.app.PendingIntent.getBroadcast (PendingIntent.java:545) bei in.kka.physiotherapy.model.Alarm.schedule (Alarm.java:143) bei in.kka.physiotherapy.service.AlarmService.onStartCommand (AlarmService.java:99) bei android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3326) bei android.app.ActivityThread. -wrap21 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1582) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:6119) bei java.lang.reflect.Method.invoke (native Methode) bei com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

Hier ist mein Code meine Klasse implementiert Serializable, aber ich bin nicht in der Lage, die Absicht extra zu übergeben, ich bekomme Fehler hier myIntent.putExtra ("Alarm", dies);

public void schedule(Context context) { 
     Realm realm = Realm.getDefaultInstance(); 

     realm.executeTransaction(new Realm.Transaction() { 
      @Override 
      public void execute(Realm realm) { 
       setAlarmActive(true); 
      } 
     }); 


     Intent myIntent = new Intent(context, AlarmServiceBroadcastReciever.class); 
     myIntent.putExtra("alarm", this); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT); 

     AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

     alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTime(), pendingIntent); 
    } 

Antwort

1

Sie versuchen, ein verwaltet, Objekt „live“ Reich zu übergeben, die von einer Proxy-Implementierung basierte - Sie ein „freistehendes“ unmanaged Objekt die Absicht übergeben müssen. Ändern Sie diese Zeile:

myIntent.putExtra("alarm", this); 

Um dies:

myIntent.putExtra("alarm", realm.copyFromRealm(this)); 

Außerdem sollten Sie die Realm Instanz schließen, vorzugsweise Einwickeln der Transaktion und copyFromRealm Aufruf in einem try-catch Block:

Realm realm = null; 
try { 
    realm = Realm.getDefaultInstance(); 
    realm.executeTransaction(new Realm.Transaction() { 
     @Override 
     public void execute(Realm transactionRealm) { 
      setAlarmActive(true); 
     } 
    }); 
    Intent myIntent = new Intent(context, AlarmServiceBroadcastReciever.class); 
    myIntent.putExtra("alarm", realm.copyFromRealm(this)); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent,PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, getAlarmTime().getTime(), pendingIntent); 
} finally { 
    if(realm != null) { 
     realm.close(); 
    } 
} 
+0

Danke so viel, es hat gut funktioniert –

+0

@KrishnaBN cool, überprüfen Sie auch die bearbeitete Antwort über das Schließen der Realm Instanz – maciekjanusz

+0

Sie sollte Objekte überhaupt nicht passieren. Übergeben Sie stattdessen die Objekt-ID und holen Sie sie aus dem Realm im Service –