0

Я настройка Android приложения и только что прошел через документацию разработчиков Android, чтобы создать базу данных SQL http://developer.android.com/training/basics/data-storage/databases.html#WriteDbRowмагазин Integer в базе данных SQL и восстановить его в фрагменте

У меня есть MainActivity, который имеет расширение Навигационный ящик настроен: http://pastebin.com/9nyejZdV и переключатель в этом действии для замены фрагментов, когда элементы нажимаются в навигационном ящике.

Эти два фрагмента, которые переключаются являются:

StartingFragment, which is displayed when the app is first opened: http://pastebin.com/740LepNV


TeaCounterFragment, which is displayed when the second item in my navdrawer is clicked: http://pastebin.com/edfEe1Gd


В StartingFragment, в методе OnClick всякий раз, когда нажата кнопка под названием "Улун", он обновляет TextView в моем TeaCounterFragment, который показывает, сколько раз была нажата кнопка «Oolong» (с помощью String.valueOf (an_integer) и Bundle).

Проблема заключается в том, что всякий раз, когда приложение полностью закрыто, TextView сбрасывает значение по умолчанию, которое не имеет счетчика. Итак, я решил, что я буду использовать базу данных SQL для хранения целого числа, так что, когда приложение будет полностью закрыто, целое число будет сохранено. Затем, когда приложение будет открыто, я могу нажать на мой NavDrawer и перейти к моему TeaCounterFragment, и число все равно будет там.

Как я могу это достичь?

активность базы данных:

public final class Database { 

    // To prevent someone from accidentally instantiating the database class, 
    // give it an empty constructor. 
    public Database() { 
    } 

    /* Inner class that defines the table contents */ 
    public static abstract class DBEntry implements BaseColumns { 

     public static final String TABLE_NAME = "Number of Cups of Tea"; 
     public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
     public static final String COLUMN_NAME_TITLE = "Tea Counter Table"; 
     public static final String COLUMN_NAME_SUBTITLE_OOLONG = "Oolong"; 
    } 

    private static final String TEXT_TYPE = " TEXT"; 
    private static final String COMMA_SEP = ","; 
    private static final String SQL_CREATE_ENTRIES = 
      "CREATE TABLE " + DBEntry.TABLE_NAME + " (" + 
        DBEntry._ID + " INTEGER PRIMARY KEY," + 
        DBEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP + 
        DBEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP + 
        DBEntry.COLUMN_NAME_SUBTITLE_OOLONG + TEXT_TYPE + COMMA_SEP + 
        ")"; 

    private static final String SQL_DELETE_ENTRIES = 
      "DROP TABLE IF EXISTS" + DBEntry.TABLE_NAME; 

    public class DatabaseHelper extends SQLiteOpenHelper { 

     public static final String DATABASE_NAME = "TeaCounter.db"; 
     public static final int DATABASE_VERSION = 1; 

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

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(SQL_CREATE_ENTRIES); //creates Database 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // This database is only a cache for online data, so its upgrade policy is 
      // to simply to discard the data and start over 
      db.execSQL(SQL_DELETE_ENTRIES); 
      onCreate(db); 
     } 

     public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      onUpgrade(db, oldVersion, newVersion); 
     } 

     public void storeCounts() { 
      DatabaseHelper mDbHelper = new DatabaseHelper(context); 
      SQLiteDatabase db = mDbHelper.getWritableDatabase(); 

      // Create a new map of values, where column names are the keys 
      ContentValues values = new ContentValues(); 
      values.put(DBEntry.COLUMN_NAME_ENTRY_ID, 1); 
      values.put(DBEntry.COLUMN_NAME_TITLE, "Tea Counter Table"); 
      values.put(DBEntry.COLUMN_NAME_SUBTITLE_OOLONG, "Oolong Tea"); 
     } 
    } 
} 

Я думал о использовании базы данных SQL, потому что я хотел бы быть в состоянии сделать это для нескольких кнопок. Однако я также открыт для предложений о любом другом способе достижения этого.

+0

, который не будет работать как имя таблицы. – njzk2

+0

@ njzk2 Я предполагаю, что это должно быть что-то вроде .. "NUM_CUPS"? – freddiev4

+0

возможно. Есть несколько ограничений на имена таблиц, см. Http://stackoverflow.com/questions/3694276/what-are-valid-table-names-in-sqlite – njzk2

ответ

1

Если вы хотите просто сохранить Integer, возможно, вы можете взглянуть на класс DefaultSharedPreferences. Смотрите эту ссылку: http://developer.android.com/reference/android/content/SharedPreferences.html

, если вы делаете это с вашего фрагмента:

SharedPreferences pref = getActivity().getSharedPreferences("keyname", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = pref.edit(); 
editor.putInt("counter", integer); 
editor.commit(); 

Затем, когда вы хотите получить его, предполагая, что у вас уже есть экземпляр SharedPreferences

Integer counter = pref.getInt("counter", 0); 

Надеется, что это помогает вы.

+0

В первом блоке кода, в котором Fragment я бы поставил этот код в ? StartingFragment, или TeaCounterFragment? И тогда я предполагаю, что я должен получить его в TeaCounterFragment? – freddiev4

+0

Да. Код редактирования в Начальном фрагменте и код поиска в TeaCounterFragment – Simar

+0

да, вот так. – gyosida

1

Поскольку вы хотите хранить только целое число, вы должны использовать общие настройки вместо базы данных.

+0

Даже если я хочу хранить целые числа для множественного подсчета количества кликов? Потому что каждая кнопка будет иметь разные целые числа в зависимости от того, сколько раз каждый из них был нажат. – freddiev4

+0

Да. Общие предпочтения - это всего лишь совокупность пар имен имен. Button1 5, Button2 8 и т. Д. – Simar

+0

OK. Прежде чем я откажусь от базы данных, хотя ... что, если я захочу позже отобразить эти целые числа в таблице/таблице, на другом фрагменте?И кнопка разделения подсчитывается в число кликов в день, неделю, месяц, в год? Могу ли я это сделать, если я использую SharedPreferences? Или тогда База данных будет более полезна? – freddiev4

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

  • Нет связанных вопросов^_^