做的一个软件,开始用的文本存的,不过后来不好修改。
于是把数据放在了string.xml里面了,现在发现实现难度很大。。
所以现在想用数据库,但又没有接触过数据库,明天就要交了,急啊。。
后来听sharedpreference可以存数据,我不想改太多,直接用以前的string.xml。。现在的问题是有不有方法可以使sharedpreference保存数组
怎么保存,修改,读取,请高手指教!(给点简单例子就是了)

解决方案 »

  1.   

    可以直接存取Set<String>.非要数组你就直接转下。
    SharedPreferences.getStringSet(String key, Set<String> defValues)
    SharedPreferences.Editor.putStringSet(String key, Set<String> values)
      

  2.   

    public abstract SharedPreferences.Editor putStringSet (String key, Set<String> values)
    Since: API Level 11Set a set of String values in the preferences editor, to be written back once commit() is called.
    Parameters
    key         The name of the preference to modify.
    values         The new values for the preference.
    Returns    * Returns a reference to the same Editor object, so you can chain put calls together. 
    楼主不妨试试将你的数组转换为set
      

  3.   

    我百度了好久都没有SharedPreferences  直接存取Set<String>.大侠能不能给点简单的例子嘛,我试下
      

  4.   

    Since: API Level 11 - - 也就是说~android3.0以上的版本才能用~泪崩吧~
      

  5.   

    嗯。。神马样的数组啊,直接static算了。
      

  6.   

    android3.0以上版本可用1楼的方法
    一下版本就有点悲催了
    如果你的数组数据量不是太多的话了以试试一个个存
    下面的代码时保存的:SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME,
    MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("flag1", data1);
    editor.putInt("flag2", data2);
    editor.putInt("flag3", data3); 
    editor.putBoolean("flag4", data4);
    editor.commit();读取:SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME,
    MODE_PRIVATE);
    data1= preferences.getBoolean("flag1", false);
    data2= preferences.getInt("flag2", 1);
    data3= preferences.getInt("flag3", 1);
    data4= preferences.getBoolean("flag4", false);
    如果数据量大的话就要用的数据库了。
    给个数据库操作的demo给你吧,
    创建数据库:package com.test.video;import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;public class DBHelper extends SQLiteOpenHelper
    { public static final String TB_NAME = "movie_info";//数据库的表名
    public static final String ID = "_id";//id
    public static final String FILENAME = "filename";// 字段
    public static final String BREAKPOINT = "breakpoint";

    public DBHelper(Context context, String name, CursorFactory factory, int version) 
    {
    super(context, name, factory, version);
    // TODO Auto-generated constructor stub
    } @Override
    public void onCreate(SQLiteDatabase db) 
    {
    // TODO Auto-generated method stub
    db.execSQL("CREATE TABLE IF NOT EXISTS " + TB_NAME + " ("
    + ID + " INTEGER PRIMARY KEY,"
    + FILENAME + " TEXT,"
    + BREAKPOINT + " INTEGER)"
    );// 创建数据库,定义各字段类型
    } @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS "+TB_NAME);
    onCreate(db);
    }}下面是对数据库的查询操作:private SQLiteDatabase db;
    private DBHelper dbHelper;
    public static final String DB_NAME = "movieinfo.db";
    public static final int VERSION = 1;dbHelper = new DBHelper(context, DB_NAME, null, VERSION);
    db = dbHelper.getWritableDatabase();String path = path.replace("'", "''");
    StringBuilder where = new StringBuilder();
    where.append(DBHelper.FILENAME + "=" + "'" + path + "'");
    String whereclause = where.toString();
    if (db != null && db.isOpen()) {
    Cursor c = db.query(DBHelper.TB_NAME,
    new String[] { DBHelper.BREAKPOINT }, whereclause,null,null, null, null);
    }
    其他类型的操作比如:增、删、改你可以网上搜索一下相关的语法就好了。
    祝你好运!