如何获取SharedPreferences数据大小,是否可能?

时间:2013-09-12 13:26:56

标签: android sharedpreferences

我正在使用SharedPreferences来保存JSONArray,然后在我没有连接到互联网时使用它。我应该检查保存数据的大小,因为我不想要任何大数据。我使用清晰的方法,但我想确保控制大小。我的保存和功能装载&清算;

public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) {
    SharedPreferences settings = c.getSharedPreferences(prefName, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(key, array.toString());
    editor.commit();
}

public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException {
    SharedPreferences settings = c.getSharedPreferences(prefName, 0);
    return new JSONArray(settings.getString(key, ""));
}

public static void clearPrefs(Context c, String prefName){
    SharedPreferences settings = c.getSharedPreferences(prefName, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.clear();
    editor.commit();
}

此功能正常运行。没有问题。但是我还需要一个能够返回所有数据大小的函数。我调查了它,但找不到任何解决方案。提前致谢。

3 个答案:

答案 0 :(得分:3)

请参阅此代码:

public void cacheData(String data, String name) throws IOException {

    File dataFile = new File(getCacheDir(), name.concat(".json"));
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(
            new FileOutputStream(dataFile));
    objectOutputStream.writeUTF(data);
    objectOutputStream.close();

}

public String readData(String name) throws IOException {

    File dataFile = new File(getCacheDir(), name.concat(".json"));
    if (!dataFile.exists()) {
        return null;
    }

    ObjectInputStream objectInputStream = new ObjectInputStream(
            new FileInputStream(dataFile));
    String data = objectInputStream.readUTF();
    objectInputStream.close();

    return data;
}

public long getDataLength(String name){

    File dataFile = new File(getCacheDir(), name.concat(".json"));
    if (!dataFile.exists()) {
        return 0;
    }
    return dataFile.length();
}

由于我们使用“UTF-8”保存您的数据,因此数据长度可能与cp1256等其他编码不同

答案 1 :(得分:2)

您可以将字符串转换为字节,然后获取字节长度:

String data = array.toString();
byte[] byteArray = data.getBytes("UTF-8");
long size = byteArray.length;

答案 2 :(得分:1)

我使用了@AndyRes的想法并创建了一个名为 sizeOfSharedPrefs 的函数;

public static long sizeOfSharedPrefs(Context c, String prefName, String command){
    SharedPreferences settings = c.getSharedPreferences(prefName, 0);
    String data = settings.getString(command, "").toString();
    byte[] byteArray = null;
    try {
        byteArray = data.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return byteArray.length;
}

它适用于我的其他功能。