| |||||||
Das Thema "DB-Werte in Panel auslesen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Erfahrener Benutzer Modell: HTC Legend Registriert seit: 05.04.2010
Beiträge: 205
Abgegebene Danke: 63
Erhielt 6 Danke für 6 Beiträge
| ich würde gerne in einem Panel-Konstruktor meiner Klasse: public class Panel extends SurfaceView{...} Werte aus einer SQLite DB übernehmen. Für die Datenbank habe ich zwei Klassen, Werte sind auch schon drin: public class DbSQLStatement extends SQLiteOpenHelper public class DBAction extends Activity (=SQL-Statements) Problem: Wenn ich nun auf die DB aus dem Panel heraus zugreifen möchte: dbaction = new DBAction(); fahrzeug = new Fahrzeug[dbaction.oeffneDBUndLies(this, "anzahlFahrzeuge")]; sagt mir Eclipse, dass die Fkt: oeffneDBUndLies(Context context, String variablenname) einen Context erwartet und nicht ein Panel. (Klar, ich rufe ja von einem Panel aus auf!). Ich kann Context aber nicht mit Panel überschreiben, weil der Context in der oeffneDBUndLies(...) zwingend erforderlich ist, nämlich hier: dbsqlstatement = new DbSQLStatement(this); //geht nur mit Context sowie SQLiteDatabase db = dbsqlstatement.getReadableDatabase(); Weiß jemand, wie ich trotzdem vom Panel aus Zugriff auf die DB/Werte nehmen könnte? Vielen Dank Duckemai |
| | |
| | #2 (permalink) |
| Erfahrener Benutzer Modell: G1 DevPhone / SGS2 / SGT10.1v Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
|
Erstell dir einen eigenen Constructor dem du zusätzlich den Context übergibst, wenn du das Panel erzeugst.
|
| | |
| Folgender Benutzer bedankt sich bei sixi für diesen Beitrag: | Duckemai (24.08.2011) |
| | #3 (permalink) |
| Erfahrener Benutzer Modell: HTC Legend Registriert seit: 05.04.2010
Beiträge: 205
Abgegebene Danke: 63
Erhielt 6 Danke für 6 Beiträge
|
Das geht bei mir leider nicht so leicht. Ich rufe nämlich mein Panel über eine Activity auf. Das mache ich deshalb, damit ich im laufenden Spiel Buttons ansprechen kann. Das sieht dann also so aus: GameActivity: Code: ...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Code: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.game.android.myGame.Panel android:id="@+id/layout_Panel"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/done2"
... Code: dbaction = new DBAction(); fahrzeug = new Fahrzeug[dbaction.oeffneDBUndLies(context, "anzahlFahrzeuge")]; Besser wäre es, wenn ich das Panel nicht schon in der xml aufrufen würde. Dann könnte ich die onCreate der GameActivity durchlaufen, die Datenbank auslesen und dann das Panel starte. Hast Du/Ihr eine Idee, wie ich das hier machen könnte? Geändert von Duckemai (23.08.2011 um 13:35 Uhr) |
| | |
| | #4 (permalink) |
| Erfahrener Benutzer Modell: G1 DevPhone / SGS2 / SGT10.1v Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
|
Hmm... dann erstellste 'nen statischen Context? z.B. eine "StartActivity" die du den anderen "vorschaltetst" und in der onCreate so weit oben wie möglich den Context in eine statische Variable speicherst. Dann kannste dir den aus dem onCreate vom Panel "abholen". Oder in deine Activity die das Panel beinhaltet - da musst du dann nur drauf achten, dass es VOR dem setContentView(...) passiert Code: ...
public static Context CONTEXT;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CONTEXT = this;
setContentView(R.layout.main); |
| | |
| Folgender Benutzer bedankt sich bei sixi für diesen Beitrag: | Duckemai (24.08.2011) |
| | #5 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Was genau ist denn ein Panel? Ein View wird ja auch immer mit einem Context erstellt und über getContext() bekommt man den...
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag: | Duckemai (24.08.2011) |
| | #6 (permalink) |
| Erfahrener Benutzer Modell: HTC Legend Registriert seit: 05.04.2010
Beiträge: 205
Abgegebene Danke: 63
Erhielt 6 Danke für 6 Beiträge
|
Hallo, ich habe die letzten Stunden versucht Eure Vorschläge umzusetzen. Das Problem bei beiden Lösungen ist, das der Context nur unvollständig ist, da er inmitten der onCreate (der Activity(sixi) oder im Konstruktor des Panels(the_alien)) erstellt wird. Dann scheint ein Context nicht richtig zu funktionieren. Daher kann ich die Datenbank nur scheinbar abfragen: Code: public class Panel extends SurfaceView{...
public Panel(Context context, AttributeSet attrs) {
super(context, attrs);
...
@sixi: int test = dbaction.oeffneDBUndLies(gameActivity.CONTEXT, "numberOfVehicle");
oder
@the_alien: int test = dbaction.oeffneDBUndLies(this.getContext(), "numberOfVehicle");
}
Code: public int oeffneDBUndLies(Context context, String variablenname){
dbsqlstatement = new DbSQLStatement(context);
int liesWert;
try {
liesWert = cursorMitSQLBefuellen(variablenname);
//liesWert = liesDBAus(cursor);
} finally {
}
return liesWert;
} Code: while(cursor.moveToNext()){
liesWert = (int) cursor.getLong(0);
} Wenn ich in der vorgeschalteten Activity, wie sixi vorgeschlagen hat, die Abfrage NACH der onCreate() mit Context noch mal durchführe, dann klappt es. Leider zu spät, da dann der Panel-Konstruktor schon gelaufen ist. Also scheint der Context WÄHREND die onCreate noch läuft unvollständig zu sein. Fällt Euch vielleicht auf, woran das liegen könnte, und ob man es trotzdem machen kann? ![]() Denn eigentlich geht es mir nur darum, dass der User in meinem Spiel Optionen wählen kann, die dann in der SurfaceView die notwendigen Variablen initialisieren. Vielleicht geht das ja anders auch viel besser? Geändert von Duckemai (23.08.2011 um 22:33 Uhr) |
| | |
| | #7 (permalink) |
| Erfahrener Benutzer Modell: HTC Legend Registriert seit: 05.04.2010
Beiträge: 205
Abgegebene Danke: 63
Erhielt 6 Danke für 6 Beiträge
|
Ok. Habe eine Lösung gefunden. Statt im Panelkonstruktor der SurfaceView zu initialisieren, habe ich die Initialisierung nach hinten verlagert in die onStart() der Activity. Dort funzt die DB ja. Vielen Dank für die Hilfe Duckemai |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| 2.2 - Car Panel App? | $t0ne | HTC Desire Forum | 25 | 10.08.2011 20:46 |
| HTC Locations + Car Panel | Venom_aut | HTC Desire S Forum | 1 | 20.06.2011 20:13 |
| [Hilfe] Desire nur da gelegen - später Display kaputt - Riss im Panel? Neues Panel? | bokii | HTC Desire Forum | 39 | 26.05.2011 16:52 |
| Laufende Lautstärke Werte vom Mikrofon auslesen(Klatsch App) | rollobollo | Android App Entwicklung | 1 | 11.02.2011 13:43 |
| arrays.xml -> Werte auslesen ohne ListPreference | Duckemai | Android App Entwicklung | 1 | 15.12.2010 17:17 |