spinner (drop down list), Daten speichern in der DB

  • Antworten:8
  • Bentwortet
azubi2015
  • Forum-Beiträge: 11

13.09.2016, 18:01:52 via Website

hi,
ich bräuchte eure Unterstützung, leider komme nicht mehr zu recht. Ich habe ein beispiel kleines Tool, t in der dropdown wird es ermöglicht neue Werte/ Aufgaben 1 - x anzulegen, dann wird in der DB gespeichert, (Das geht)image
später kann man jede Aufgabe in der Liste anzeigen lassen. Im Moment kann ich beliebig Werte, Aufgaben anlegen und speichern. image

Ich bin gerade dabei eine Liste einzubauen, zu jeder Aufgabe soll eine Beschreibung zugeordnet sein. D.h Aufgabe 1 ist zur der Beschreibung 1 zugeordnet. Mit dem Button Save sollten parallel auch Beschreibung gespeichert werden. Wie schon gesagt später wenn ich bspw. Aufgabe 2 anzeigen möchte, soll dazu Beschreibung 2 in der Liste angezeigt werden. Etwas kompliziert, ich hoffe kann mir jemand helfen.

            public void onClick(View arg0) {
            String label = inputLabel.getText().toString();

            if (label.trim().length() > 0) {
                // database handler
                DatabaseHandler db = new DatabaseHandler(
                        getApplicationContext());

                // inserting new label into database
                db.insertLabel(label);

                // making input filed text to blank
                inputLabel.setText("");

                // Hiding the keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(inputLabel.getWindowToken(), 0);

                // loading spinner with newly added data
                loadSpinnerData();
            } else {
                Toast.makeText(getApplicationContext(), "Please enter label name",
                        Toast.LENGTH_SHORT).show();
            }

        }
    });
}

/**
 * Function to load the spinner data from SQLite database
 * */
private void loadSpinnerData() {
    // database handler
    DatabaseHandler db = new DatabaseHandler(getApplicationContext());

    // Spinner Drop down elements
    List<String> lables = db.getAllLabels();

    // Creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, lables);

    // Drop down layout style - list view with radio button
    dataAdapter
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
        long id) {
    // On selecting a spinner item
    String task = parent.getItemAtPosition(position).toString();

    // Showing selected spinner item
    Toast.makeText(parent.getContext(), "You selected: " + task,
            Toast.LENGTH_LONG).show();

}

DbHelper.java

 public void onCreate(SQLiteDatabase db) {
    // Category table create query
    String CREATE_CATEGORIES_TABLE = "CREATE TABLE " + TABLE_LABELS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_DESCRIP + " TEXT)";
    db.execSQL(CREATE_CATEGORIES_TABLE);
}

 public void insertLabel(String label){
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, label);

    // Inserting Row
    db.insert(TABLE_LABELS, null, values);
    db.close(); // Closing database connection
}

/**
 * Getting all labels
 * returns list of labels
 * */
public List<String> getAllLabels(){
    List<String> labels = new ArrayList<String>();

    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_LABELS;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            labels.add(cursor.getString(1));
        } while (cursor.moveToNext());
    }

    // closing connection
    cursor.close();
    db.close();

    // returning lables
    return labels;
}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.09.2016, 18:29:49 via App

Und was ist dabei das Problem?
Füge in deiner Db Tabelle eine Spalte Description ein und inserte da deine Beschreibung.
Lesen und speichern kannst du das dann wie bei den Labels.
Oder sehe ich das falsch?

PS: Den Db helper würde ich als Klassenvariable deklarieren, und nicht jedesmal im onCklick neu initialisieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy

Antworten
azubi2015
  • Forum-Beiträge: 11

13.09.2016, 20:47:05 via Website

Mit description klappst nicht. In der Sqlite DB habe ich Spalte mit description zwar schon..werde speichern noch auslesen klappst

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.09.2016, 22:09:00 via App

Wo ist denn der Code dazu?
Oben sehe ich nix dergleichen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
azubi2015
  • Forum-Beiträge: 11

23.09.2016, 23:14:07 via Website

Hi,
ich habe einen EditText hinzugefügt, im EditText wird die Beschreibung hinzugefügt und gespeichert.

Hier ist der Kode:

image

btnAdd.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            String label = inputLabel.getText().toString();
            String label1 = inputDescription.getText().toString();


            if (label.trim().length() > 0) {
                // database handler
                DatabaseHandler db = new DatabaseHandler(
                        getApplicationContext());

                // inserting new label into database
                db.insertLabel(label);
                db.insertLabel(label1);

                // making input filed text to blank
                inputLabel.setText("");
                inputDescription.setText("");

Mit dem Speichern funktioniert nicht richtig. Wie gesagt, wenn ich einen Person hinzufüge, speichert das. Wenn ich zu dem Person 1, Description im EditText schreibe und dann speichere, wieso speichert das die Beschreibung in der Spinner und zwar doppelt. (Einmal schreibt in drop down Azubi 1 und unten die Beschreibung. Sollte nur gespeicherte Personen/Azubis aufgelistet werden)Wie mache ich so, dass nur Aufgaben/ Tasks im Spinner gespeichert werden. Description nicht.
Bspw.: Person 1 hat Aufgabe 1 ----- Wenn ich dann Person 1 in der EditText anzeigen möchte, soll zu dem Person 1 die Beschreibung ausgegeben werden. Ich hoffe kann mir jemand helfen.
vielen Dank
image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.09.2016, 08:25:01 via App

Deine Select bei get Labels ist falschm Du machst ein Select all d.h. Titel und Beschreibung. Du willst aber nur den Titel.
Schau dir mal an welche Daten von getLabels zurückkommen.
Also ich vermute das es am laden und nicht am speichern liegt.

LG Pascal //It's not a bug, it's a feature. :) ;)

azubi2015

Antworten
azubi2015
  • Forum-Beiträge: 11

24.09.2016, 16:11:37 via Website

:? schwer, meine Kenntnisse sind noch nicht so weit wie eure ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.09.2016, 16:15:36 via App

Am besren eine Schleife über deine getLabels Array List und diese per log.d ausgeben

LG Pascal //It's not a bug, it's a feature. :) ;)

azubi2015

Antworten
azubi2015
  • Forum-Beiträge: 11

24.09.2016, 16:23:49 via Website

konnte sein muss ich an diese Stelle ändern so das nur KEY_NAME in der Spinner angezeigt werden?

hier werden alle Daten ausgegeben, muss ich filtern
//orig.
//String selectQuery = "SELECT * FROM " + TABLE_LABELS;

// String selectQuery = "SELECT KEY_NAME FROM " + TABLE_LABELS;

Syntaxfehler wohl :(
danke schön

Antworten