Otevření databáze z fragmentu a ostatních míst v Android app? – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Otevření databáze z fragmentu a ostatních míst v Android  app? – Java – Fórum – Programujte.comOtevření databáze z fragmentu a ostatních míst v Android app? – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #1
-
0
-

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?

Nahlásit jako SPAM
IP: 194.12.42.–
Reklama
Reklama
Kit+11
Guru
30. 12. 2014   #2
-
0
-

#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.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec5f:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #3
-
0
-

Takže se když otevřu databázi tímhle způsobem na více místech nebude se to hádat?

Nahlásit jako SPAM
IP: 194.12.42.–
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #4
-
0
-

Takže pokaždé, když budu něco vkládat nebo vybírat z databáze, použiji tento vzor a DB se mi poté i automaticky zavře?

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+11
Guru
30. 12. 2014   #5
-
0
-

#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.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec5f:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tom
~ Anonymní uživatel
417 příspěvků
Nahlásit jako SPAM
IP: 194.12.42.–
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #7
-
0
-

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í?

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+11
Guru
30. 12. 2014   #8
-
0
-

#6 Tom
Je to zajímavé, ale na více vláknech ti to nemusí fungovat korektně. Singleton je dost záludný.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec5f:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+11
Guru
30. 12. 2014   #9
-
0
-

#7 Tom
Ano, předáváním objektu "database" děláš tzv. Dependency Injection.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec5f:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #10
-
0
-

Když už jsem to nakousli, je lepší předávat do fragmentu databázi v bundle pomocí Serializable, nebo jí tam znova inicializovat?

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+11
Guru
30. 12. 2014   #11
-
0
-

#10 Tom
Připojení k databázi přece nemůžeš serializovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:ec5f:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tom
~ Anonymní uživatel
417 příspěvků
30. 12. 2014   #12
-
0
-

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.

Nahlásit jako SPAM
IP: 194.12.42.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 197 hostů

Podobná vlákna

Web app vs desktop app — založil Plui

C# Desktop app do Mobile app — založil kironet

Program na ostatnich PC — založil N-DEX

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý