3

我正在使用 SharedPreferences 来保存 JSONArray,然后在我没有连接到 Internet 时使用它。我应该检查保存数据的大小,因为我不想要任何大数据。我为此使用明确的方法,但我想通过控制大小来确定这一点。我的保存、加载和清除功能;

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();
}

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

4

3 回答 3

3

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

String data = array.toString();
byte[] byteArray = data.getBytes("UTF-8");
long size = byteArray.length;
于 2013-09-12T13:33:16.967 回答
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 等其他编码不同

于 2013-09-12T19:39:00.057 回答
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;
}

它适用于我的其他功能。

于 2013-09-17T11:40:03.660 回答