0

我有几十条数据需要在应用程序启动时保存和加载。它们是 int、String、long 和数组数据类型。我很困惑,似乎有很多方法可以做到这一点。似乎每个变体都有不同的方法。一些数据在应用程序运行时被修改。可以说我有以下

  int WifiOn="1";
  private long Lasttime="00/00/00";
  private String UserId="12345678";
  private String URLResource[]= {"A","B","C");
  //I open file...
  FileOutputStream fos = openFileOutput("userPref.dat", Context.MODE_PRIVATE);

接下来我该如何处理我的四种数据类型以将它们保存到内部存储中?那么加载它们的方法是什么?

4

3 回答 3

1

id 数据有限则可以使用shared preference,如果数据多可以使用 SQLite database

 dozen pieces of data

最好使用简单高效的 SQLite 数据库,也可以满足您的需要

请参阅链接以了解如何使用它

根据http://developer.android.com/guide/topics/data/data-storage.html

您的数据存储选项如下:

  • 共享偏好

将私有原始数据存储在键值对中。

  • 内部存储器

将私有数据存储在设备内存中。

  • 外置储存

将公共数据存储在共享的外部存储上。

  • SQLite 数据库

将结构化数据存储在私有数据库中。

  • 网络连接

使用您自己的网络服务器将数据存储在网络上。

于 2012-06-26T07:33:11.733 回答
1

除了SharedPreferences 和SQLite databasesDheeresh Singh 提到的之外,您还可以使用Serialization,因为您只使用简单的数据类型。

如何通过序列化将数据写入文件:

//create an ObjectOutputStream around your (file) OutputStream
ObjectOutputStream oos = new ObjectOutputStream(fos);
//The OOS has methods like writeFloat(), writeInt() etc.
oos.writeInt(myInt);
oos.writeInt(myOtherInt);
//You can also write objects that implements Serializable:
oos.writeObject(myIntArray);
//Finally close the stream:
oos.flush();
oos.close();

如何通过序列化从文件中读取数据:

//Create an ObjectInputStream around your (file) InputStream
ObjectInputStream ois = new ObjectInputStream(fis);
//This stream has read-methods corresponding to the write-methods in the OOS, the objects are read in the order they were written:
myInt = ois.readInt();
myOtherInt = ois.readInt();
//The readObject() returns an Object, but you know it is the same type that you wrote, so just cast it and ignore any warnings:
myIntArray = (int[]) ois.readObject();
//As always, close the stream:
ois.close();

附带说明一下,考虑将 In/OutStream 包装在 BufferedInput/OutputStream 中,以挤出一些额外的读/写性能。

于 2012-06-26T07:48:27.057 回答
1

如果所有数据的格式都完全相同,您可能应该使用JSON, 在函数中创建对象,然后将它们写入文件。

public bool writeToFile(int wifiOn, long lastTime, String userId, String [] urlResources) {
   JSONObject toStore = new JSONObject();
   FileOutputStream fos = openFileOutput("userPref.dat", Context.MODE_PRIVATE);

   toStore.put("wifiOn", wifiOn);
   toStore.put("lastTime", lastTime);
   toStore.put("userId", userId);
   toStore.put("urlResources", urlResources);

   try {
       fos.write(toStore.toString().getBytes());
       fos.close();
       return true;
   } catch (Exception e) {
       e.printStackTrace();
   }
   return false;
}
于 2012-06-26T07:40:28.980 回答