-1

我有以下方法。此方法的目的是从缓存中检索存储的数组列表。

  public ArrayList<T> read_arraylist_from_cache(File name){

    FileInputStream fis;
    ArrayList<T> returnlist = null;
    try {   
            fis = new FileInputStream(name);            
            ObjectInputStream ois = new ObjectInputStream(fis);

           //here I take the exception 
            returnlist = (ArrayList<T>) ois.readObject();
            ois.close();
    } catch (Exception e) {
        Log.d("Cannot retrieve the arraylist from the cache", "Cannot retrieve the arraylist from the cache", e);
        e.getStackTrace();
    }
    return returnlist;
}

但是,当我尝试转换为 ArrayList 时,我会遇到 WriteAbortedException。我传递给上述类的 ArrayList 如下:

 ArrayList <Product>

产品pojo在哪里:

 public class Products implements Serializable{

 @JsonProperty
 private String prodnum;
     @JsonProperty
     private String brand;

      //get,set
  }

我用来将数组列表存储到缓存的方法如下

   public void write_to_byte_array(ArrayList<T> list,File file){

    // write to byte array
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(file);
    } catch (FileNotFoundException e1) {
        Log.d("file not found", "file not found", e1);
    }

    ObjectOutputStream oos = null;
    try {
        oos = new ObjectOutputStream(fos);
    } catch (Exception e1) {
        Log.d("Create ObjectOutputStream object", "Create ObjectOutputStream object", e1);
    }


    try {
        oos.writeObject(list);
    } catch (IOException e1) {
        Log.d("Write ObjectOutputStream object to file", "Write ObjectOutputStream object to file", e1);
    }


    try {
        oos.close();
    } catch (IOException e1) {
        Log.d("Close the connection with the file", "Close the connection with the file", e1);
    }


}

我传递给上述方法的 arratList 列表是

        ArrayList<Products>

再次,文件和我之前写的文件一样。但是我不明白我做错了什么。谁能帮我?

4

1 回答 1

1

WriteAbortedException API很好地描述了这个问题。

在写入您尝试读取的对象时,您是否在日志中捕获任何内容?

您是否检查过 WriteAbortedException.getCause() 返回的内容?

另外,请注意,您的异常处理write_to_byte_array确实应该重新考虑。如果 FileOutputStream 构造函数失败,无法找到文件,你记录它,然后继续,如果没有任何问题,保证你将在下一个 try 块抛出 NullPointerException,并再次继续,就好像什么都没有错误,保证在下一个 try 块出现另一个 NullPointerException。

于 2012-12-11T21:15:06.203 回答