Создал класс-Singleton:
public class DataManager
{
private static DataManager mDataManager;
private static Database mDatabase;
private static DaoSession mDaoSession;
private static List<Task> mTasks;
public static void initInstance(Context context)
{
if (mDataManager == null)
{
mDataManager = new DataManager();
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "TASKS");
mDatabase = helper.getWritableDb();
mDaoSession = new DaoMaster(mDatabase).newSession();
mTasks = mDaoSession.queryBuilder(Task.class).build().list();
}
}
public static DataManager getInstance()
{
return mDataManager;
}
public Database getDatabase()
{
return mDatabase;
}
public DaoSession getDaoSession()
{
return mDaoSession;
}
public List<Task> getTaskList()
{
return mTasks;
}
public void updateTaskList()
{
mTasks = mDaoSession.queryBuilder(Task.class).build().list();
}
}
В MyApplication проинициализировал его:
public class MyApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();
DataManager.initInstance(getApplicationContext());
}
}
MyApplication, соответственно, указан в манифесте:
<application
android:name=".MyApplication"
...
В MainActivity в onCreate вытягиваю список и помещаю его в RecyclerView:
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Task> tasks = DataManager.getInstance().getTasksList();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rvMainRecycler);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
MainRecyclerViewAdapter mainRecyclerViewAdapter = new MainRecyclerViewAdapter(tasks);
recyclerView.setAdapter(mainRecyclerViewAdapter);
}
...
В onDestroy очищаю сессию и закрываю БД:
@Override
protected void onDestroy()
{
DataManager.getInstance().getDaoSession().clear();
DataManager.getInstance().getDatabase().close();
super.onDestroy();
}
В другой активити навесил на кнопку:
btnInsert.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
TaskDao taskDao = DataManager.getInstance().getDaoSession().getTaskDao();
Task task = new Task(/*здесь некоторые параметры*/);
taskDao.insertOrReplaceInTx(task);
taskDao.detachAll();
}
});
Все, что меня интересует - это:
taskDao.detachAll(); - нужно ли?
DataManager.getInstance().getDaoSession().clear(); - соответственно, нужно ли очищать сессию?
DataManager.getInstance().getDatabase().close(); - и закрывать БД?
И правильно ли я их вызвал ДО super.onDestroy();?
P.S. В манифесте выставил только портретную ориентацию, поэтому активити не пересоздается при смене ориентации, может вообще все это зря с синглтоном?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как переместить индикаторы текущего слайдера на само изображение, а не под ним? Пример на скриншоте:
После добавления класса "row" объекты попадают в нужную мне строку но приобретают ненужное мне свойство
Подскажите, как убрать отступы между кнопкамиЭти отступы нигде не фиксируются