Datenbankausgabe mit Klammern {= }

  • Antworten:5
Nick K.
  • Forum-Beiträge: 15

23.03.2012, 10:33:20 via Website

Ok Hi Leute,

ich bin absolut neu hier im Forum.
Ich bin seit geraumer Zeit dabei für Android Apps zu entwickeln.

Ich habe mich mit Hilfe von diversen Tutorials und DVD'S durch viele schwierigen Kapitel in der Android Entwicklung selbst gebracht.
Jetzt komme ich leider an einen Punkt wo ich ABSOLUT NICHT MEHR WEITER WEISS.

Folgendes ist mein Problem...:

Ich habe in einer Datenbank eine Tabelle namens "User".
Ich möchte aus dieser Datenbank den aktuel eingeloggten User in eine TextView ziehen.

Das ganze klappt auch soweit, jedoch steht als Name, folgendes....:

{= nick}

Ich möchte allerdings das dort steht...:
Nick

Wenn mir einer helfen könnte, oder einen Tipp geben könnte wie ich dieses Problem lösen könnte, wäre ich sehr dankbar.

Mit freundlichem Gruß,
Nick.


1package com.example.androidhive.library;
2
3import java.util.HashMap;
4
5import android.content.ContentValues;
6import android.content.Context;
7import android.database.Cursor;
8import android.database.sqlite.SQLiteDatabase;
9import android.database.sqlite.SQLiteOpenHelper;
10
11public class DatabaseHandler extends SQLiteOpenHelper {
12
13 // All Static variables
14 // Database Version
15 private static final int DATABASE_VERSION = 1;
16
17 // Database Name
18 private static final String DATABASE_NAME = "android_api";
19
20 // Login table name
21 private static final String TABLE_LOGIN = "login";
22
23 // Login Table Columns names
24 private static final String KEY_ID = "id";
25 private static final String KEY_NAME = "name";
26 private static final String KEY_EMAIL = "email";
27 private static final String KEY_UID = "uid";
28 private static final String KEY_CREATED_AT = "created_at";
29
30 public Cursor cursor;
31
32 public DatabaseHandler(Context context) {
33 super(context, DATABASE_NAME, null, DATABASE_VERSION);
34 }
35
36 // Creating Tables
37 @Override
38 public void onCreate(SQLiteDatabase db) {
39 String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
40 + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
41 + KEY_EMAIL + " TEXT UNIQUE," + KEY_UID + " TEXT,"
42 + KEY_CREATED_AT + " TEXT" + ")";
43 db.execSQL(CREATE_LOGIN_TABLE);
44 }
45
46 // Upgrading database
47 @Override
48 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
49 // Drop older table if existed
50 db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);
51
52 // Create tables again
53 onCreate(db);
54 }
55
56 /**
57 * Storing user details in database
58 * */
59 public void addUser(String name, String email, String uid, String created_at) {
60 SQLiteDatabase db = this.getWritableDatabase();
61
62 ContentValues values = new ContentValues();
63 values.put(KEY_NAME, name); // Name
64 values.put(KEY_EMAIL, email); // Email
65 values.put(KEY_UID, uid); // Email
66 values.put(KEY_CREATED_AT, created_at); // Created At
67
68 // Inserting Row
69 db.insert(TABLE_LOGIN, null, values);
70 db.close(); // Closing database connection
71 }
72
73 /**
74 * Getting user data from database
75 * */
76 public HashMap<String, String> getUserDetails() {
77 HashMap<String, String> user = new HashMap<String, String>();
78 String selectQuery = "SELECT * FROM " + TABLE_LOGIN;
79
80 SQLiteDatabase db = this.getReadableDatabase();
81 Cursor cursor = db.rawQuery(selectQuery, null);
82 // Move to first row
83 cursor.moveToFirst();
84 if (cursor.getCount() > 0) {
85 user.put("name", cursor.getString(1));
86 user.put("email", cursor.getString(2));
87 user.put("uid", cursor.getString(3));
88 user.put("created_at", cursor.getString(4));
89 }
90 cursor.close();
91 db.close();
92 // return user
93 return user;
94 }
95
96 public HashMap<String, String> getCurentUser() {
97 HashMap<String, String> user = new HashMap<String, String>();
98 String selectQuery = "SELECT * FROM " + TABLE_LOGIN;
99
100 SQLiteDatabase db = this.getReadableDatabase();
101 cursor = db.rawQuery(selectQuery, null);
102 // Move to first row
103 cursor.moveToFirst();
104 if (cursor.getCount() > 0) {
105 user.put("", cursor.getString(1));
106
107 }
108 cursor.close();
109 db.close();
110 // return user
111 return user;
112 }
113
114 /**
115 * Getting user login status return true if rows are there in table
116 * */
117 public int getRowCount() {
118 String countQuery = "SELECT * FROM " + TABLE_LOGIN;
119 SQLiteDatabase db = this.getReadableDatabase();
120 Cursor cursor = db.rawQuery(countQuery, null);
121 int rowCount = cursor.getCount();
122 db.close();
123 cursor.close();
124
125 // return row count
126 return rowCount;
127 }
128
129 /**
130 * Re crate database Delete all tables and create them again
131 * */
132 public void resetTables() {
133 SQLiteDatabase db = this.getWritableDatabase();
134 // Delete All Rows
135 db.delete(TABLE_LOGIN, null, null);
136 db.close();
137 }
138
139}

Beachte die Funktion "getCurentUser()" (etwas weiter unten).
Dort wird eine Abfrage gestellt und dem DB Cursor übergeben.

Nun meine Abfrage um den Namen rauszuholen....:

1public class Urlaubsantrag extends Activity {
2 .
3 .
4 .
5
6 TextView usertext;
7 .
8 .
9
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 .
13 .
14 .
15 DatabaseHandler helper = new DatabaseHandler(this);
16
17 usertext = (TextView) findViewById(R.id.usertext);
18 usertext.setText(helper.getCurentUser().toString());

Ich hole mir in der "onCreate" Methode den DatabaseHandler (der Quellcode davor) und mach einfach in meine TextView
die Abfrage mit der Methode nach dem aktuellem User...

Warum wird der User mir dann so angezeigt ?????
Und nicht "normal"...




Ich Danke euch jetzt schon für eure Ideen und eure Tipps.

Mfg, Nick.

— geändert am 23.03.2012, 10:52:48

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

23.03.2012, 13:16:51 via Website

Das kommt davon, wenn man fremden Code unbesehen kopiert und den dann auch beim Verwenden nicht anschaut...
Du hast gesehen das die fragliche Funktion eine Map, also eine Menge von Werten zurückgibt?

Antworten
Klaus T.
  • Forum-Beiträge: 8.183

23.03.2012, 13:23:44 via Website

1user.put("", cursor.getString(1));

Der Sinn, in eine HashMap was ohne Key rein zu stellen, erschliesst sich mir auch nicht unbedingt.

:V

if all else fails, read the instructions.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

23.03.2012, 13:37:48 via Website

@Klaus: genau, und ein getString(1) bei einem "select *" würde ich zumindest mal als mutig bezeichnen ;)
Vermutlich stand da mal korrekter Code, der aber nicht zur Tabelle des TE passte, und der wurde dann blind so gekürzt, das er sich übersetzen ließ.

Antworten
Klaus T.
  • Forum-Beiträge: 8.183

23.03.2012, 14:11:35 via Website

Stimmt.

@Nick, da ist einiges im Argen. Auch das getUserDetail().

Ohne jetzt deine Logik zu verstehen, aber von deiner Terminologie - getCurrentUser und getUserDetail() würde ich vermuten, dass du genau *einen* bestimmten Satz aus der Datenbank lesen willst. Dann solltest du eine WHERE-Klausel drin haben. So gehst du davon aus, dass der erwartete Satz genau der Erste ist, der selektiert wird...ganz schlecht. Ausserdem die Felder aufzählen und nicht mit "*" selektieren. Die Daten könnten u.U. in einer anderen Reihenfolge im Resultset stehen als du sie mit getString(1)..(4) rausholst.
Wenn die Funktion wirklich nur einen Satz zurückliefern soll, dann natürlich auch keine Map, das ist Unsinn (ebenso eine Map, wo der Key "" ist!).

[...]

:)

— geändert am 23.03.2012, 14:12:14

if all else fails, read the instructions.

Antworten
Nick K.
  • Forum-Beiträge: 15

26.04.2012, 10:53:46 via Website

Hi,

also nochmal vielen Dank für die Hinweise.
Ich hab das nicht richtig gesehen und es war natürlich im nachhinein ziemlich bescheuert.

Ansich ist das mit der WHERE Klausel natürlich auch logischer, ist aber in diesem Falle nicht wichtig,
da es nur ein Test war.

Also nochmal Danke.Jetzt läufts :)

Antworten