如何使用方线序列化

时间:2019-06-27 15:45:39

标签: retrofit square-wire

当我尝试序列化结果时,获取NullPointerException: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'byte [] com.squareup.wire.ProtoAdapter.encode(java.lang.Object)'

在ObjectOutputStream之前尝试使用BufferedOutputStream
尝试搜索相同的错误

用于序列化的代码:
“结果”是使用wire-compiler自动生成的类。
result.toString()返回一个字符串(所以实际上不是null)
如果将整个“结果”保存为纯文本格式,则将生成5MB的文件。

public static void serialize(File fullPath, Result result){
        try {
            // System.out.println(result.toString());
            FileOutputStream fileOut = new FileOutputStream(fullPath);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(result); // NullPointerException mentioned above
            out.close();
            fileOut.close();
        } catch (IOException i) {
            i.printStackTrace();
        }
    }

翻新实例:

OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(1, TimeUnit.MINUTES)
                .readTimeout(1, TimeUnit.MINUTES)
                .retryOnConnectionFailure(true)
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(ProtoConverterFactory.createWithRegistry(ExtensionRegistry.newInstance()))
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        SchemaAPI schemaAPI = retrofit.create(SchemaAPI.class);

This are the contents of the file at fullpath: ’ 
which doesnt seem to be the entire result.

1 个答案:

答案 0 :(得分:0)

ArrayList<ITEMS> itemsList = new ArrayList<>();
FileOutputStream fileOut = new FileOutputStream(schema);
ObjectOutputStream out = new ObjectOutputStream(fileOut);
for(Result.ITEMS item:result.items){
    itemsList.add(item.newBuilder().build());
}
out.writeObject(itemsList);
out.close();
fileOut.close();
相关问题