Android でのシリアル化に問題があります。サーバーはJavaで書かれています。オブジェクトの ArrayList を使用して DataContainer オブジェクトをシリアル化します。この場合、Category オブジェクトの ArrayList を含む Menu オブジェクトが Android デバイスに送信されます。逆シリアル化すると機能しますが、ArrayList カテゴリのサイズは 0 です。通常の Java で記述されたクライアントを使用すると、完全に機能します。すべてのクラスは Serializable を実装し、サーバーと Android アプリは同じパッケージを使用しています (別のオブジェクトのシリアル化と逆シリアル化も正常に機能します)。私が間違っていることは何ですか?
コードフラグメントは次のとおりです。
メニュー:
public class Menu implements Serializable {
public ArrayList<Category> categories = new ArrayList<Category>();
}
カテゴリー:
public class Category implements Serializable {
Integer category_id;
String name;
public ArrayList<Product> products;
}
Product クラスでも同様です (セッターとゲッターを削除しました)。
逆シリアル化コード:
o = server.readObject();
dc = (DataContainer) o;
while(!dc.data.isEmpty()) {
o = dc.data.remove(0);
if(o instanceof Menu) {
if(mds.saveMenu((Menu) o))
m = (Menu) o;
Log.i("Synchronizacja", "Zapisano menu " + m.getCategories().size()); // This line says that categories.size() is 0
}
デスクトップ Java デシリアライゼーション コード:
public void manageInput(Object o){
DataContainer dc = (DataContainer) o;
Menu m = (Menu) dc.data.get(0);
System.out.println(m.categories.size()); // This line returns a non-zero value
}