0

次のコードを使用してオブジェクトをシリアル化し、putSerializable を介してバンドルにアタッチし、メッセージを介してバンドルを他のプロセスに送信しています。問題は、オブジェクトがシリアル化できないというエラーが発生することです。「implements Serialazable」を追加しようとしましたが、それでも同じエラーが発生します。

public static byte[] serializeObject(Object o)
{ 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

    try { 
      ObjectOutput out = new ObjectOutputStream(bos); 
      out.writeObject(o); 
      out.close(); 

      // Get the bytes of the serialized object 
      byte[] buf = bos.toByteArray(); 

      return buf; 
    } catch(IOException ioe) { 
      Log.e("serializeObject", "error", ioe); 

      return null; 
    } 
  } 

これは、呼び出しを行うコードです。

                ArrayList<byte[]> blist=null;
                Bundle b = new Bundle();
                if (TriggerList != null && TriggerList.size() > 0)
                {
                    Iterator iter = TriggerList.iterator(); 
                    while (iter.hasNext()) 
                    {
                        Bundle entry = (Bundle) iter.next();
                        if (msg.arg1 == entry.getInt(ProjDefs.APP_ID))
                        {
                            if (blist == null)
                                blist=new ArrayList<byte[]>();
                            SerBundle sb = new SerBundle(entry);
                            byte[] bb = serializeObject(sb);
                            blist.add(bb);
                        }    
                    }
                    b.putSerializable(ProjDefs.SERIAL_DATA, blist);
                }
                NotifyClient(msg.arg1, ProjDefs.GET_APP_TRIGGERS_RESPONSE, 0, 0, b, null);

シリアライズ可能なクラス:

public class SerBundle は Serializable を実装します{

/**
 * 
 */
private static final long serialVersionUID = 1L;
public Bundle bundle;

public SerBundle(Bundle bundle)
{
    this.bundle = bundle;
}

}

4

1 に答える 1

0

ABundleはすでにParcelableです。をいじる必要なくBundle、別の値として aを入れることができます。BundleObjectOutputStream

于 2012-04-24T11:17:39.250 に答える