将对象写入内部存储

时间:2014-11-29 17:56:54

标签: java android object storage internal

我已经成功地在我的Android应用程序的内部存储器上编写和读取字符串到一个文件,但我想写一个对象并且它无法正常工作。我已经阅读了Oracle关于这个问题的文档,其中说对象字段是通过对象需要实现可序列化的流传输的,或者是什么。我添加了可序列化的进口并实现了serializable到cat类,但它引发了一个错误。没有它" oos.writeObject(myCat);"也会导致错误。我很困惑。

以下代码存在于与layout.xml绑定的java活动类中。用户按下按钮并保存或加载对象。如上所述,书写和阅读字符串似乎工作正常,但对象不那么正常。

   private void writeFile()
   {
      try
      {
         String myFile = "myFile";
         cat myCat = new cat("Harry", "blue", 11);

         FileOutputStream fos = openFileOutput(myFile,MODE_WORLD_READABLE);
         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(myCat);
         oos.close();
         fos.close();

         Toast.makeText(getBaseContext(),"object saved",Toast.LENGTH_SHORT).show();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
}

并且

   private void readFile()
   {
      try
      {
         String myFile = "myFile";

         FileInputStream fis = openFileInput(myFile);
         ObjectInputStream ois = new ObjectInputStream(fis);
         cat yourCat = (cat) ois.readObject();
         ois.close();
         fis.close();

         String output = yourCat.name + " the " + yourCat.colour + " cat";
         Toast.makeText(getBaseContext(),output,Toast.LENGTH_SHORT).show();
      }
      catch (Exception e)
      {

      }
}

猫对象

public class cat
{
   public String name = "";
   public String colour = "black";
   public int age = 0;

   public cat(String pName, String pColour, int pAge)
   {
      name = pName;
      colour = pColour;
      age = pAge;
   }
}

2 个答案:

答案 0 :(得分:1)

添加"实现Serializable"到猫类的作品。我不确定为什么它首先没有。对不起,大惊小怪。

答案 1 :(得分:0)

在openFileOutput()方法中使用..... MODE_PRIVATE

希望它可以帮助你......

thanxx ...