Rád bych věděl jak korektně otevřít přístup k SQLite databázi z fragmentu, dialogu, apod.. mám pokaždé použít: ?
Database database=new Database(this);
A jak je to s jejím ukončením?
#1 Tom
Od JDK 7 by se měla používat tato konstrukce
try (Database database = new Database(this)) {
// práce s databází
} catch (IOException e) {
e.printStackTrace();
}
která zajistí i korektní zavření databáze.
#4 Tom
Nejlépe pokud si tu databázi otevřeš na začátku aplikace a držíš ji otevřenou celou dobu v jednom vlákně. Ostatně je to i mnohem výkonnější. Jinak riskuješ kolizi při přístupu ze dvou nezávislých vláken.
Todle je docela zajímavý článek: http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html
Shrnuto na začátku app jsem otevřel databázi pomocí
Database database=new Database(this);
Je to klasická databáze vytvořená pomocí SQLiteOpenHelper. Proměnou database jsem předával jako parametr každé části, která s ní pracuje, jako například dialogy, fragmenty, apod., je to nejlepší řešení?
Takhle já předávám odkaz na databázi do fragmentu
inicializace fragmentu
public static GuestFragment newInstance(String guestName, Database database) {
GuestFragment fragment = new GuestFragment();
Bundle bundle = new Bundle();
bundle.putString(GUEST_NAME_KEY, guestName);
bundle.putSerializable(DATABASE_KEY, database);
fragment.setArguments(bundle);
bundle=null;
return fragment;
}
MainActivity
fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment=GuestFragment.newInstance (NameList.getItemAtPosition(position).toString(), databse);
fragmentTransaction.replace(R.id.content_layout, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Ale abych mohl poslat objekt s databází pomocí bundle musím ho serializovat.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku