Daten in Datei speichern und lesen

  • Hallo,


    ich weiß das Thema wurde sicherlich oft behandelt, aber ich bin mit meinem Latein am Ende.
    Bis hierhin habe ich mir alles selber beigebracht, aber nun klemmts bei mir und ich hoffe mich kann jemand "an die Hand nehmen"



    Ich schreib mal was Sache ist:


    Die App liest 4 GPS-Daten aus, rechnet die Entfernungen der Punkte in Meter um und berechnet den Flächeninhalt. So weit, so gut.



    Die APP ist wie folgt aufgebaut:



    Startseite: Button mit "neue Vermessung starten" und (noch nicht hinbekommen: Liste der bisher vermessenen Flächen)
    Vermessen-Bildschirm 1: Felder wo man Namen des Grundstücks und zwei weitere Texte eintragen kann. Button "Vermessung starten"
    Vermessen-Bildschirm 2: Da kann man den GPS-Fix für 4 Punkte anfordern und die Fläche wird berechnet.



    Könnte mir jemand erklären, wie ich die Daten aus Vermessen-Bildschirm 1 mit den Ergebnissen aus Vermessen-Bildschirm 2 verknüpfe und in einem 3. Bildschirm zusammenfasse? Dieser wiederum soll von Seite 1 aufrufbar (dort: eine Liste mit bisher vermessenen Flächen)


    Ich mache das ganze für eine Arbeit im Studium und habe bisher viel probiert & gebastelt um bis hier hin zu kommen. Aber jetzt wo es um SQLite geht bin ich mit dem Latein am Ende....



    Ich danke schon Mal im Voraus & hoffe auf Eure Hilfe.


    Gruß,


    Philipp

  • Hi RDUKE7777777,


    Zitat

    Könnte mir jemand erklären, wie ich die Daten aus Vermessen-Bildschirm 1 mit den Ergebnissen aus Vermessen-Bildschirm 2 verknüpfe und in einem 3. Bildschirm zusammenfasse? Dieser wiederum soll von Seite 1 aufrufbar (dort: eine Liste mit bisher vermessenen Flächen)


    mmhh also an einer Datenbank zum permanenten Speicher kommst du nicht vorbei.


    Idee:
    - in Startbildschirm fragst du die DB ab ob Flächen da sind(abprüfen des Cursors). Falls ja zeigst du sie an (Stichwort: SimpleCursorAdapter) falls nicht läßte du die List leer und gibst ne nachricht aus (zbsp. TextView: keine Flächen Vorhanden)
    - nachdem was du geschrieben hast könntest du Vermessen 1 und 2 auch in einem Bildschirm packen -> die von dir ermitteln Daten (Name,Fläche, GPS-Koordinaten etc.) schreibst du dann einfach in die DB
    - falls du die Screens(vermessen 1 und 2) nicht zusammen fassen willst bzw kannst, könntest du dir eine Klasse erstellen die die Daten aus Vermessen 1 Zwischenspeicher und dann mit den ermittelten Daten von Vermessen 2 in die DB schreibt


    mfg Titus

  • Hi, Danke schonmal.


    Im Startbildschirm sage ich dem Programm dann auch, dass er die Datenbank anlegen soll falls es noch keine neue gibt?
    Und wie ist das mit dem übertragen der Daten von einer Activity zur Anderen? Kann ich die Variablen einfach so übergeben oder muss ich das auf jeden Fall mit Intents machen?


    Z.B. Vermessen1-->Intent mit TextDaten --> Activity 2 --> Intent mit Text-UND GPS-Daten --> in DB Schreiben? Oder wäre es besser die Daten beide wieder zurück an Main zu liefern und dort alle DB-Funktionien implementieren?


    Sorry falls ich auf dem Schlauch stehen sollte :)

  • So, hallo nochmal, ein kleines Update meinerseits.


    Ich habe es inzwischen geschafft Daten in einer Datenbank abzuspeichern (erst mal nur test-Daten, aber das hat andere Gründe)
    und zwar so:



    Mein Datenbank-Helferlein (eigene Klasse)
    package de.rduke.parzellenvermessung;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    public class Database_Manager extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "parzellen.db";
    public static final String INFO = "info";
    public static final String FLAECHE = "flaeche";
    public static final String STEIGUNG = "steigung";
    public Database_Manager(Context context) {
    super(context, DATABASE_NAME, null, 1); }


    @Override public void onCreate(SQLiteDatabase db) {
    db.execSQL( "CREATE TABLE parzellen (_id INTEGER PRIMARY KEY AUTOINCREMENT,info TEXT, flaeche TEXT,steigung TEXT);"); }


    @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    android.util.Log.w("parzellen", "Upgrading database, which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS parzellen"); onCreate(db); }}



    Hier dann die Funktion zum speichern in der DB in der Activity (nicht main)
    void db_save(String info, double flaeche, double steigung) {
    String flaeche_s=String.valueOf(flaeche);
    String steigung_s=String.valueOf(steigung);
    Database_Manager dbmanager=new Database_Manager(this);
    SQLiteDatabase db = dbmanager.getWritableDatabase();
    ContentValues cv= new ContentValues();
    cv.put(dbmanager.INFO, info);
    cv.put(dbmanager.FLAECHE, flaeche_s);
    cv.put(dbmanager.STEIGUNG, steigung_s);
    db.insert("parzellen", dbmanager.INFO, cv); db.close();


    Und schließlich der Aufruf der Funktion mit Test-Daten


    String info="hello";
    double steigung1=100;
    double flaeche1=100;
    db_save(info, flaeche1,steigung1);





    Ich weiß, mit ContentProvider wäre eleganter, aber das kommt in der nächsten Version B-)


    Jetzt meine Frage:
    Wie kann ich aus der Main-Activity auf die Daten zugreifen?
    Ich hätte gerne in einer List View ein Query auf die Daten, nebeneinander sollen dann ID und die 3 Strings ausgegeben werden.


    Könnte mir das freundlicherweise jemand erklären?
    Vielen Dank im Voraus!


    Grüße


    P.S.: Habe versucht es als formatierten Code hier einzubinden, er hat aber keine Zeilenumbrüche akzeptiert, sorry about that :P

  • Danke, ich hab es hinbekommen. Ich hab meine Main-Activity des Weiteren umgestaltet, von extends Activity auf Extends ListActivity. Das hat mir ein paar Funktionalitäten beschert mit denen ich die ListView recht gut mit der DB verknüpfen konnte.


    Grüße

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!