Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

DB-Werte in Panel auslesen

Das Thema "DB-Werte in Panel auslesen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 22.08.2011, 12:47   #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
Standard DB-Werte in Panel auslesen

Hallo,

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
Duckemai ist offline   Mit Zitat antworten
Alt 23.08.2011, 10:26   #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
Standard AW: DB-Werte in Panel auslesen

Erstell dir einen eigenen Constructor dem du zusätzlich den Context übergibst, wenn du das Panel erzeugst.
sixi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sixi für diesen Beitrag:
Duckemai (24.08.2011)
Alt 23.08.2011, 13:12   #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
Standard AW: DB-Werte in Panel auslesen

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);
und in der main.xml befinden sich die Buttons der Activity SOWIE der Panelaufruf. D.h.: wenn setContentView(R.layout.main) aufgerufen wird, springt das Programm in das Panel.

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" 
                ...
Zwar wird dem Panel ein Context übergeben. Der lässt sich aber im Panel-Konstruktor nicht benutzen ...
Code:
dbaction = new DBAction();
  fahrzeug = new Fahrzeug[dbaction.oeffneDBUndLies(context, "anzahlFahrzeuge")];
...und löst eine NullPointerException aus. Vielleicht, weil die GameActivity noch gar nicht komplett durch die onCreate durch ist.

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)
Duckemai ist offline   Mit Zitat antworten
Alt 23.08.2011, 13:22   #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
Standard AW: DB-Werte in Panel auslesen

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);
sixi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sixi für diesen Beitrag:
Duckemai (24.08.2011)
Alt 23.08.2011, 13:39   #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
Standard AW: DB-Werte in Panel auslesen

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.
the_alien ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag:
Duckemai (24.08.2011)
Alt 23.08.2011, 22:03   #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
Standard AW: DB-Werte in Panel auslesen

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");
}
Das Programm läuft hier rein:

Code:
public int oeffneDBUndLies(Context context, String variablenname){
        dbsqlstatement = new DbSQLStatement(context); 
        int liesWert;
          try {
              liesWert = cursorMitSQLBefuellen(variablenname); 
             //liesWert = liesDBAus(cursor); 
          } finally {
              
          }
        return liesWert;
    }
und befüllt auch den Cursor. Doch leider findet er die Einträge in der Datenbank nicht, und überspringt die Zeilen:

Code:
while(cursor.moveToNext()){
                 liesWert = (int) cursor.getLong(0);
              }
als wäre die DB leer. Ist sie aber nicht, denn:

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)
Duckemai ist offline   Mit Zitat antworten
Alt 24.08.2011, 18:40   #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
Standard AW: DB-Werte in Panel auslesen

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
Duckemai ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "DB-Werte in Panel auslesen" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.