2011-07-28 15 views
7

Los valores se están aprobando y la ejecución se realiza correctamente, pero veo que estos se lanzan en logcat y quiero eliminarlos, he comprobado los foros anteriores, pero nada en específico. Soy publicar mi código de abajo, por favor hágamelo saber por qué este problema se produzcaandroid.os.BadParcelableException: ClassNotFoundException al desmaterializar: excepción

public class ExecutionInfo implements Parcelable 
{ 

    private int offSet; 

    private List<Integer> pollingIntervalArray = new ArrayList<Integer>(); 

    private List<String> commandLst= new ArrayList<String>(); 

    private int repeatCount; 

    private int executorId; 

    private int processType; 


    public ExecutionInfo() 
    { 

    } 

    public ExecutionInfo(Parcel source) 
    { 
     offSet = source.readInt(); 
     repeatCount = source.readInt(); 
     executorId = source.readInt(); 
     processType = source.readInt(); 
     source.readStringList(commandLst); 
     source.readList(pollingIntervalArray, Integer.class.getClassLoader()); 
    } 

    public int getOffSet() 
    { 
     return offSet; 
    } 

    public void setOffSet(int offSet) 
    { 
     this.offSet = offSet; 
    } 

    public List<Integer> getInterval() 
    { 
     return pollingIntervalArray; 
    } 

    public void setInterval(List<Integer> pollingIntervalVec) 
    { 
     this.pollingIntervalArray = pollingIntervalVec; 
    } 

    public List<String> getCommandLst() 
    { 
     return commandLst; 
    } 

    public void setCommands(String command) 
    { 
     commandLst.add(command); 
    } 

    public int getRepeatCount() 
    { 
     return repeatCount; 
    } 

    public void setRepeatCount(int repeatCount) 
    { 
     this.repeatCount = repeatCount; 
    } 

    public int getExecutorId() 
    { 
     return executorId; 
    } 

    public void setExecutorId(int executorId) 
    { 
     this.executorId = executorId; 
    } 

    @Override 
    public int describeContents() 
    { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) 
    { 

      dest.writeInt(offSet); 
      dest.writeInt(repeatCount); 
      dest.writeInt(executorId); 
      dest.writeInt(processType); 
      dest.writeStringList(commandLst); 
      dest.writeList(pollingIntervalArray); 
    } 

    public static final Parcelable.Creator<ExecutionInfo> CREATOR = new Parcelable.Creator<ExecutionInfo>() 
    { 
     public ExecutionInfo createFromParcel(Parcel in) 
     { 
      return new ExecutionInfo(in); 
     } 

     public ExecutionInfo[] newArray(int size) 
     { 
      return new ExecutionInfo[size]; 
     } 
    }; 

    public int getProcessType() 
    { 
     return processType; 
    } 

    public void setProcessType(int processType) 
    { 
     this.processType = processType; 
    } 
} 

Excepción que está siendo lanzado en repetidas ocasiones es: pero esto no impide la ejecución

: com.seven.superapptwitter.xmlHandler.ExecutionInfo 
07-27 16:52:11.418: WARN/Intent(2458): Failure filling in extras 
07-27 16:52:11.418: WARN/Intent(2458): android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.seven.superapptwitter.xmlHandler.ExecutionInfo 
07-27 16:52:11.418: WARN/Intent(2458):  at android.os.Parcel.readParcelable(Parcel.java:1883) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.os.Parcel.readValue(Parcel.java:1771) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.os.Parcel.readMapInternal(Parcel.java:2008) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.os.Bundle.unparcel(Bundle.java:208) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.os.Bundle.putAll(Bundle.java:281) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.content.Intent.fillIn(Intent.java:5127) 
07-27 16:52:11.418: WARN/Intent(2458):  at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:195) 
07-27 16:52:11.418: WARN/Intent(2458):  at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:177) 
07-27 16:52:11.418: WARN/Intent(2458):  at android.app.PendingIntent.send(PendingIntent.java:400) 
07-27 16:52:11.418: WARN/Intent(2458):  at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:680) 
+0

se las arregló para encontrar una solución sin necesidad de utilizar la serialización? – bencallis

+0

posible duplicado de ["BadParcelableException: ClassNotFoundException al desasignar " al usar el método Parcel.read que tiene un ClassLoader como argumento] (http://stackoverflow.com/questions/18126249/badparcelableexception-classnotfoundexception-when-unmarshalling-myclass-wh) – Flow

Respuesta

-7

Ok, finalmente estoy usando serialization para no obtener esta excepción. Serializo el objeto convertir a byte array lo almacena y luego lo paso en PendingIntent check.

estoy seguro de que esto aumenta la cabeza por encima, pero no parece afectar el funcionamiento .En este caso cuando las alarmas se disparará no veo ninguna excepción

+1

No es una solución muy útil, ya que puedes omitir el uso de 'Parcelable' y usar' Serializable' en su lugar. – Melllvar

+1

No debe confiar en soluciones alternativas en lugar de buscar una solución que funcione mejor. – Varundroid

4

creo que esto es contestada por usted aquí: Problem unmarshalling parcelables.

Básicamente, debe configurar el cargador de clases porque el AlarmManagerService es un proceso de SO separado.

+0

U, esta línea es la que arroja el error source.readList (pollingIntervalArray, Integer.class.getClassLoader()); No veo ningún otro lugar donde el cargador de clases se apruebe o deba pasarse? – Kavitha

+0

No. Ni siquiera está llegando a esa línea de ClassNotFoundException (en el seguimiento de la pila que ha proporcionado). No está solo al intentar enviar un parcelable a través de un PendingIntent: http://stackoverflow.com/questions/2307476/classnotfoundexception-when-using-custom-parcelable/2307764#2307764 – Jason

+0

Oops ... pulse el botón de devolución demasiado pronto. El problema es que AlarmManager no está utilizando su cargador de clases para deserializar el PendingIntent por lo que no tiene acceso a su clase ExecutionInfo. Desafortunadamente, parece como si tuviera que usar un método de serialización alternativo. Una posibilidad sería crear una Parcela usted mismo ('Parcel parcel = Parcel.obtain()'), serializarla ('infoObject.writeToParcel (parcel, 0)'), obtener la matriz de bytes ('byte [] rawParcel = parcel. marshall() 'y coloca esa matriz de bytes en tu paquete. En el otro lado tendrías que usar Parcel.unmarshall() y luego usar el constructor – Jason

Cuestiones relacionadas