2015-01-30 7 views
0

Некоторое время я использую форматирование JSON для хранения информации в приложениях Android.Более эффективные способы хранения информации в базе данных Android

Однако это иногда беспорядочно, и я чувствую, что он неэффективен в некоторых аспектах. У меня есть более общий вопрос: Есть ли более эффективные способы хранения информации в приложениях для Android?

+0

вы рассмотрели, используя общие предпочтения? –

+0

зависит от того, что вы храните и сколько больших данных вы храните. – virendrao

ответ

1

Вы можете store information in Android 4 способами:

  1. сохраняющиеся в обычае Database
    • реляционные данные
    • Несколько экземпляров одного и того же структуры
    • Не теряют данные после процесс приложения убит
    • Тяжелые операции
  2. Упорно в Shared Preferences Android,
    • Простые данные, такие как примитивные типы (boolean, string, int ..), что происходит только один раз
    • Не потерять данные после того, как процесс приложения убит
    • Операции с освещением
  3. Сохраняется в файле во внутренней/внешней памяти
    • В зависимости от вашего выбора, может быть, как 1. или 2.
    • Harder поддерживать чем 1. или 2.
  4. Держа его в памяти
    • Данные потеряны, когда ваш процесс приложения убит
    • легчайший из всех вариантов

Какой из них вас интересует?

Я бы рекомендовал 1. или 2. для большинства случаев, но я по-прежнему нужно больше информации


базы данных SQLite (с использованием шаблона DAO, который я рекомендую)

DatabaseHelper.Класс

public class DatabaseHelper extends SQLiteOpenHelper { 

    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "your_app_name.db"; 
    private static final String TABLE_MODEL_CREATE= 
           "create table " + Model.TABLE_NAME 
           + " (" 
           + Model.COLUMN_ID+ " integer primary key autoincrement, " 
           + Model.COLUMN_SOME_INTEGER + " integer, " 
           + Model.COLUMN_SOME_STRING + " text " 
           + ");"; 

    public DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // will run if there is no DB with your DATABASE_NAME 
    @Override 
    public void onCreate(SQLiteDatabase database) 
    { 
     database.execSQL(TABLE_MODEL_CREATE); 
    } 

    // will run if there is already a DB with your DATABASE_NAME and a lower DATABASE_VERSION than this 
    @Override 
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) 
    { 
     // execute all the updates you want 
     database.execSQL(UPGRADE_1); 
     database.execSQL(UPGRADE_2); 
     // ... 
     onCreate(database); 
    } 
} 

ModelDAO.class

public class ModelDAO { 

    private SQLiteDatabase database; 
    private DatabaseHelper dbHelper; 

    public ModelDAO(Context context) 
    { 
     dbHelper = new DatabaseHelper(context); 
     database = GarcomApplication.db; 
    } 

    public void open() throws SQLException 
    { 
     database = dbHelper.getWritableDatabase(); 
    } 

    public void close() 
    { 
     dbHelper.close(); 
    } 

    public Model createModel(Model model) 
    { 
     ContentValues values = modelToContentValues(model); 

     long insertId = database.insert(Model.TABLE_NAME, null, values); 
     return getModel(insertId); 
    } 

    public Model updateModel(Model model) 
    { 
     ContentValues values = modelToContentValues(model); 

     int rowsAffected = database.update(Model.TABLE_NAME, values, Model.COLUMN_ID + " = " + model.getId(), null); 
     if (rowsAffected > 0) 
     { 
     return getModel(model.getId()); 
     } 

     return null; 
    } 

    public void deleteModel(Model model) 
    { 
     database.delete(Model.TABLE_NAME, Model.COLUMN_ID + " = " + model.getId(), null); 
    } 

    public Model getModel(long modelId) 
    { 
     Cursor cursor = database.query(Model.TABLE_NAME, Model.allColumns, Model.COLUMN_ID + " = " + modelId, null, null, null, null); 
     cursor.moveToFirst(); 
     Model novoModel = cursorToModel(cursor); 
     cursor.close(); 
     return novoModel; 
    } 

    public List<Model> getModelList() 
    { 
     List<Model> modelList = new ArrayList<Model>(); 
     Cursor cursor = database.query(Model.TABLE_NAME, Model.allColumns, null, null, null, null, null); 

     cursor.moveToFirst(); 
     while (!cursor.isAfterLast()) 
     { 
     Model model = cursorToModel(cursor); 
     modelList.add(model); 
     cursor.moveToNext(); 
     } 
     cursor.close(); 
     return modelList; 
    } 

    private ContentValues modelToContentValues(Model model) 
    { 
     ContentValues values = new ContentValues(); 
     values.put(Model.COLUMN_SOME_INTEGER, model.getSomeInteger()); 
     values.put(Model.COLUMN_SOME_STRING, model.getSomeString()); 

     return values; 
    } 

    private Model cursorToModel(Cursor cursor) 
    { 
     Model model = new Model(cursor.getLong(0), cursor.getInt(1), cursor.getString(2)); 
     return model; 
    } 
} 

Model.class

// when you have time, read about implementing Serializable or Parcelable in your models 
// it will help you to transfer this whole object throughout activities etc 
public class Model { 

    public static final String TABLE_NAME = "model"; 

    public static final String COLUMN_ID = "id"; 
    public static final String COLUMN_SOME_INTEGER = "some_integer"; 
    public static final String COLUMN_SOME_STRING = "some_string"; 
    private final String[] allColumns = 
    { 
     Model.COLUMN_ID, 
     Model.COLUMN_SOME_INTEGER, 
     Model.COLUMN_SOME_STRING 
    }; 

    private long id; 
    private Integer someInteger; 
    private String someString; 

    // constructors, getters and setters 

} 

Использование:

ModelDAO modelDAO = new ModelDAO(someContext); 
modelDAO.open(); // opening DB connection 

Model newModel = new Model(); 
Model persistedModel = modelDAO.createModel(newModel); // inserting a new model 
Model updatedModel= modelDAO.updateModel(persistedModel); // updating a model 
modelDAO.deleteModel(updatedModel); // deleting a model 

modelDAO.close(); // closing DB connection (NEVER FORGET ABOUT THIS!) 

Shared Preferences

// getting access to SharedPreferences 
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); 

// reading data 
Integer yourInteger = prefs.getInteger("your_integer_name", defaultIntegerValue); 

// persisting data 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
editor.putInteger("your_integer_name", yourInteger); 
editor.commit(); 
+0

1 Кажется, что я направляюсь. Благодарю. –

+0

Хорошо. Это потребует времени. Я буду экономить свои изменения время от времени, чтобы вы могли прочитать его как можно скорее –

+1

Спасибо, человек, это действительно полезно. Я попробую кое-что из этого. –

Смежные вопросы