Daten aus MySQL Datenbank in Android in eine Listview anzeigen?

  • Antworten:10
Steve Brunner
  • Forum-Beiträge: 7

13.06.2014, 13:47:18 via Website

Hallo, ich habe ein Problem mit meinem Android Projekt. Und zwar möchte ich folgendes Umsetzen:

Registrierte Nutzer sollen sich in eine (Spiel) Sitzung einloggen können. Das mit dem Registrieren habe ich durch Tutorials hinbekommen. Analog dazu habe ich auch das Erstellen einer Sitzung hinbekommen. Alle beiden werden unter "user" und "session" tabellen in einer mysql datenbank gespeichert.

so weit, so gut.

Mein Problem ist jetzt:
- Ich möchte dass man die Spalteneinträge der "session"tabelle in der App ersehen kann in Form einer Liste.
Wie kann ich also auf die Daten in meiner MySQL Datenbank zugreifen und diese in einer Art Tabelle anzeigen lassen?

Ich habe mein Projekt in folgende Pakete eingeteilt:

  • com.spiel
    <-- hier sind die ganzen Activities drinnen
  • com.spiel.library
    <-- hier wird die Verbindung zur Datenbank geregelt und die Kommunikation (JSON).
  • DatabaseHandler.java
  • JSONParser.java
  • UserFunction.java

als tutorial für das Ganze habe ich folgendes benutzt:

androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/

Meine session Tabelle hat folgende Spalten:

  • sid
  • sname
  • key_created_at

sid und sname sollen in meiner app als tabelle angezeigt werden.

wie bekomme ich das hin?
würde mich freuen, wenn mir jemand einen Tipp geben könnte oder mir anders helfen :)

— geändert am 13.06.2014, 13:48:01

Antworten
Fabian Simon
  • Forum-Beiträge: 359

13.06.2014, 15:45:36 via Website

Da sich ja der mysql vermutlich auf einem Server befinden.
Solltest du NIE direkt auf diese zugreifen....
Nutzte immer eine Schnittstelle.
z.B.. ein PHP oder JAVA Programm das auf dem Server läuft.
Das heißt :

App verbindet sich mit Server über die schnittstelle.
Die Schnittstelle greift auf die Datenbank zu

Antworten
Steve Brunner
  • Forum-Beiträge: 7

13.06.2014, 17:54:19 via Website

Ja das tue ich auch :)

habe das jetzt hinbekommen auf die daten auf der datenbank zuzugreifen...

aber wenn ich auf eine nummer zugreifen will (int) kommt diese fehlermeldung:

no package identifier when getting value for resource number

Antworten
Steve Brunner
  • Forum-Beiträge: 7

13.06.2014, 18:00:38 via Website

Ich habe folgendes Tutorial verwendet um auf die Datenbankinhalte zuzugreifen.

coderzheaven.com/2012/09/25/table-values-mysql-database-show-android-tables/

es klappt auch - aber wenn ich z.b place als INT umändere in der users.java, mainactivities.java und in der datenbank als int deklariere - kommt der oben genannte fehler..

hat wer ne idee?

MainActivity.java /////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.spiel;

import java.util.ArrayList;
import java.util.Iterator;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.   graphics.   Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
import android.widget.TextView;

   public class MainActivity extends Activity {

String data = &quot;&quot;;
TableLayout tl;
TableRow tr;
TextView label;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tl = (TableLayout) findViewById(R.id.maintable);

    final GetDataFromDB getdb = new GetDataFromDB();
    new Thread(new Runnable() {
        public void run() {
            data = getdb.getDataFromDB();
            System.out.println(data);

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    ArrayList&lt;Users&gt; users2 = parseJSON(data);
                    addData(users2);                     
                }
            });

        }
    }).start();
}

public ArrayList&lt;Users&gt; parseJSON(String result) {
    ArrayList&lt;Users&gt; users = new ArrayList&lt;Users&gt;();
    try {
        JSONArray jArray = new JSONArray(result);
        for (int i = 0; i &lt; jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Users user = new Users();
            user.setId(json_data.getInt(&quot;id&quot;));
            user.setName(json_data.getString(&quot;name&quot;));
            user.setPlace(json_data.getInt(&quot;place&quot;));
            users.add(user);
        }
    } catch (JSONException e) {
        Log.e(&quot;log_tag&quot;, &quot;Error parsing data &quot; + e.toString());  
    }
    return users;
}

void addHeader(){
    /** Create a TableRow dynamically **/
    tr = new TableRow(this);

    /** Creating a TextView to add to the row **/
    label = new TextView(this);
    label.setText(&quot;User&quot;);
    label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    label.setPadding(5, 5, 5, 5);
    label.setBackgroundColor(Color.RED);
    LinearLayout Ll = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(label,params);
    tr.addView((View)Ll); // Adding textView to tablerow.

    /** Creating Qty Button **/
    TextView place = new TextView(this);
    place.setText(&quot;Place&quot;);
    place.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    place.setPadding(5, 5, 5, 5);
    place.setBackgroundColor(Color.RED);
    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(place,params);
    tr.addView((View)Ll); // Adding textview to tablerow.

     // Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
}

@SuppressWarnings({ &quot;rawtypes&quot; })
public void addData(ArrayList&lt;Users&gt; users) {

    addHeader();

    for (Iterator i = users.iterator(); i.hasNext();) {

        Users p = (Users) i.next();

        /** Create a TableRow dynamically **/
        tr = new TableRow(this);

        /** Creating a TextView to add to the row **/
        label = new TextView(this);
        label.setText(p.getName());
        label.setId(p.getId());
        label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        label.setPadding(5, 5, 5, 5);
        label.setBackgroundColor(Color.GRAY);
        LinearLayout Ll = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(5, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(label,params);
        tr.addView((View)Ll); // Adding textView to tablerow.

        /** Creating Qty Button **/
        TextView place = new TextView(this);
        place.setText(p.getPlace());
        place.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        place.setPadding(5, 5, 5, 5);
        place.setBackgroundColor(Color.GRAY);
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(place,params);
        tr.addView((View)Ll); // Adding textview to tablerow.

         // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        }
    }
}

Users.java /////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.spiel;

public class Users {

int id;
String name;
 int place;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getPlace() {
    return place;
}
public void setPlace(int place) {
    this.place = place;
}

}

GetDataFromDB.java //////////////////////////////////////////////////

package com.spiel;


  import org.apache.http.client.HttpClient;
  import org.apache.http.client.ResponseHandler;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.impl.client.BasicResponseHandler;
   import org.apache.http.impl.client.DefaultHttpClient;

  public class GetDataFromDB {

public String getDataFromDB() {
    try {

        HttpPost httppost;
        HttpClient httpclient;
        httpclient = new DefaultHttpClient();
        httppost = new HttpPost(
                &quot;ht tp://MEINEDOMAIN/getUsers2.php&quot;); // change this to your URL.....
        ResponseHandler&lt;String&gt; responseHandler = new BasicResponseHandler();
        final String response = httpclient.execute(httppost,
                responseHandler);

        return response.trim();

    } catch (Exception e) {
        System.out.println(&quot;ERROR : &quot; + e.getMessage());
        return &quot;error&quot;;
    }
  }
 }

— geändert am 13.06.2014, 18:23:57

Antworten
Steve Brunner
  • Forum-Beiträge: 7

13.06.2014, 18:41:24 via Website

yuhu, ich habs vorerst:

place.setText(""+(p.getPlace()));

das " " + hatte gefehlet... da setText anscheinend mit einem Integer allein nichts anfangen kann...

gibt's anstatt setText setNumber oder so? so dass man das ganze ohne " " + schreiben kann?

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

13.06.2014, 20:50:37 via Website

Bitte lerne etwas mehr die Grundlagen.
Wenn du etwas in einen String umwanden willst nutze die Object Methode #toString()
Also:

place.setText(p.getPlace().toString());

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

Antworten
Steve Brunner
  • Forum-Beiträge: 7

13.06.2014, 22:25:09 via Website

Bedanke mich, ich versuch es auch mit deinem Code mal.

eine Frage. Ich habe ja nun eine listview, wie kann ich es umsetzen Einen Button pro Zeile der Tabelle hinzuzufügen. Quasi das man eine Zeile auswählen kann, und beim auswählen eben danach eine Aktion stattfinden. Weil im Moment werden die Daten in der listview nur angezeigt,.

Würde mich über einen Ratschlag freuen. Mfg

Edit:

habe es mit deinem Code nun versucht: da sagt eclipse mir:

Cannot invoke toString() on the primitive type int

— geändert am 14.06.2014, 00:09:17

Antworten
Andreas S.
  • Forum-Beiträge: 76

14.06.2014, 01:00:44 via App

String.valueOf(b.getPlace());

Antworten
Steve Brunner
  • Forum-Beiträge: 7

14.06.2014, 01:43:56 via Website

ok danke :)

ich habe noch ein Paar Probleme mit der JSON RESPONSE. Wie ich gesagt habe habe ich das ganze mit Tutorials erstellt und analog Dinge verändert, aber leider klappt hier folgendes nicht:

Wenn ich einen Register bzw. einen Login mache, spuckt JSON folgendes aus:

06-13 18:53:42.142: E/JSON(1046): {"tag":"register","success":1,"error":0,"uid":"539b80f5f25e72.46763927","user":{"name":"Stefan","email":"max@testtestet.de","created_at":"2014-06-13 22:53:41","updated_at":null}}n

aus - das ist wunderbar, klappt. der legt das in der datenbank an, und zeigt mir die daten dann auch an im LogCat.
Das gleiche klappt auch mit "tag: login"

ich habe analog dazu eine session gemacht, quasi eine Sitzung die man erstellen kann.

Das klappt, wird in der Datenbank auch angelegt ABER
angezeigt wird im Logcat folgendes:

06-13 19:17:52.212: E/JSON(1046): {"tag":"start_session","success":1,"error":0,"session":{"sname":null,"smax":null,"sbet":null,"created_at":null,"updated_at":null}}n

der zeigt alles null obwohl in der mysql datenbank die Werte erfolgreich drinnen sind... ich komme selbst nicht drauf, obwohl ich alles analog wie bei login und register gemacht habe.

Ich habe hier mal den Source Code der Dateien hinzugefügt die meiner Meinung nach einen Fehler beinhalten.

Meine index.php auf dem Server: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    &lt;?php

/**
 * File to handle all API requests
 * Accepts GET and POST
 * 
 * Each request will be identified by TAG
 * Response will be JSON data

  /**
 * check for POST request 
 */
if (isset($_POST['tag']) &amp;&amp; $_POST['tag'] != '') {
// get tag
$tag = $_POST['tag'];

// include db handler
require_once 'include/DB_Functions.php';
$db = new DB_Functions();

// response Array
$response = array(&quot;tag&quot; =&gt; $tag, &quot;success&quot; =&gt; 0, &quot;error&quot; =&gt; 0);

// check for tag type
if ($tag == 'login') {
    // Request type is check Login
    $email = $_POST['email'];
    $password = $_POST['password'];

    // check for user
    $user = $db-&gt;getUserByEmailAndPassword($email, $password);
    if ($user != false) {
        // user found
        // echo json with success = 1
        $response[&quot;success&quot;] = 1;
        $response[&quot;uid&quot;] = $user[&quot;unique_id&quot;];
        $response[&quot;user&quot;][&quot;name&quot;] = $user[&quot;name&quot;];
        $response[&quot;user&quot;][&quot;email&quot;] = $user[&quot;email&quot;];
        $response[&quot;user&quot;][&quot;created_at&quot;] = $user[&quot;created_at&quot;];
        $response[&quot;user&quot;][&quot;updated_at&quot;] = $user[&quot;updated_at&quot;];
        echo json_encode($response);
    } else {
        // user not found
        // echo json with error = 1
        $response[&quot;error&quot;] = 1;
        $response[&quot;error_msg&quot;] = &quot;Incorrect email or password!&quot;;
        echo json_encode($response);
    }
} 
else if ($tag == 'register') {
    // Request type is Register new user
    $name = $_POST['name'];
    $email = $_POST['email'];
    $password = $_POST['password'];

    // check if user is already existed
    if ($db-&gt;isUserExisted($name)) {
        // user is already existed - error response
        $response[&quot;error&quot;] = 2;
        $response[&quot;error_msg&quot;] = &quot;User already existed&quot;;
        echo json_encode($response);
    } else {
        // store user
        $user = $db-&gt;storeUser($name, $email, $password);
        if ($user) {
            // user stored successfully
            $response[&quot;success&quot;] = 1;
            $response[&quot;uid&quot;] = $user[&quot;unique_id&quot;];
            $response[&quot;user&quot;][&quot;name&quot;] = $user[&quot;name&quot;];
            $response[&quot;user&quot;][&quot;email&quot;] = $user[&quot;email&quot;];
            $response[&quot;user&quot;][&quot;created_at&quot;] = $user[&quot;created_at&quot;];
            $response[&quot;user&quot;][&quot;updated_at&quot;] = $user[&quot;updated_at&quot;];
            echo json_encode($response);
        } else {
            // user failed to store
            $response[&quot;error&quot;] = 1;
            $response[&quot;error_msg&quot;] = &quot;Error occured in Registartion&quot;;
            echo json_encode($response);
        }
    }
    }
 else if 
($tag == 'start_session') {
    // Request type is Register new session
    $sname = $_POST['sname'];
    $smax = $_POST['smax'];
    $sbet = $_POST['sbet'];

    // check if user is already existed
    if ($db-&gt;isSessionExisted($sname)) {
        // user is already existed - error response
        $response[&quot;error&quot;] = 3;
        $response[&quot;error_msg&quot;] = &quot;Session already existed&quot;;
        echo json_encode($response);
    } else {
        // store user
        $session = $db-&gt;storeSession($sname, $smax, $sbet);
        if ($session=!false) {
            // user stored successfully
            $response[&quot;success&quot;] = 1;

            $response[&quot;session&quot;][&quot;sname&quot;] = $session[&quot;sname&quot;];
            $response[&quot;session&quot;][&quot;smax&quot;] = $session[&quot;smax&quot;];
            $response[&quot;session&quot;][&quot;sbet&quot;] = $session[&quot;sbet&quot;];
            $response[&quot;session&quot;][&quot;created_at&quot;] = $session[&quot;created_at&quot;];
            $response[&quot;session&quot;][&quot;updated_at&quot;] = $session[&quot;updated_at&quot;];
            echo json_encode($response);
        } else {
            // session failed to store
            $response[&quot;error&quot;] = 1;
            $response[&quot;error_msg&quot;] = &quot;SESSION Error occured in 

Registartion&quot;;
            echo json_encode($response);
          }
    }
} else {
    echo &quot;Invalid Request&quot;;
}
} else {
echo &quot;Access Denied&quot;;
}
 ?&gt;

Die DB_Functions.php Datei: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

&lt;?php

class DB_Functions {

private $db;

//put your code here
// constructor
function __construct() {
    require_once 'DB_Connect.php';
    // connecting to database
    $this-&gt;db = new DB_Connect();
    $this-&gt;db-&gt;connect();
}

// destructor
function __destruct() {

}

/**
 * Storing new user
 * returns user details
 */
public function storeUser($name, $email, $password) {
    $uuid = uniqid('', true);
    $hash = $this-&gt;hashSSHA($password);
    $encrypted_password = $hash[&quot;encrypted&quot;]; // encrypted password
    $salt = $hash[&quot;salt&quot;]; // salt
    $result = mysql_query(&quot;INSERT INTO users(unique_id, name, email, 

encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', 

'$encrypted_password', '$salt', NOW())&quot;);
    // check for successful store
    if ($result) {
        // get user details 
        $uid = mysql_insert_id(); // last inserted id
        $result = mysql_query(&quot;SELECT * FROM users WHERE uid = $uid&quot;);
        // return user details
        return mysql_fetch_array($result);
    } else {
        return false;
    }
}


    /**
 * Storing new session
 * returns session details
 */
public function storeSession($sname, $smax, $sbet) {
    $usid = uniqid('', true);
    $result = mysql_query(&quot;INSERT INTO session(unique_sid, sname, smax, 

sbet, created_at) VALUES('$usid', '$sname', '$smax', '$sbet', NOW())&quot;);
    // check for successful store
    if ($result) {
        // get user details 
        $sid = mysql_insert_id(); // last inserted id
        $result = mysql_query(&quot;SELECT * FROM session WHERE sid = $sid&quot;);
        // return user details
        return mysql_fetch_array($result);
    } else {
        return false;
    }
}

/**
 * Get user by email and password
 */
public function getUserByEmailAndPassword($email, $password) {
    $result = mysql_query(&quot;SELECT * FROM users WHERE email = '$email'&quot;) or 

die(mysql_error());
    // check for result 
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows &gt; 0) {
        $result = mysql_fetch_array($result);
        $salt = $result['salt'];
        $encrypted_password = $result['encrypted_password'];
        $hash = $this-&gt;checkhashSSHA($salt, $password);
        // check for password equality
        if ($encrypted_password == $hash) {
            // user authentication details are correct
            return $result;
        }
    } else {
        // user not found
        return false;
    }
}

/**
 * Check user is existed or not
 */
public function isUserExisted($email) {
    $result = mysql_query(&quot;SELECT email from users WHERE email = 

'$email'&quot;);
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows &gt; 0) {
        // user existed 
        return true;
    } else {
        // user not existed
        return false;
    }
}

 /**
 * Check session is existed or not
 */
public function isSessionExisted($sname) {
    $result = mysql_query(&quot;SELECT sname from session WHERE sname = 

'$sname'&quot;);
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows &gt; 0) {
        // user existed 
        return true;
    } else {
        // user not existed
        return false;
    }
}

/**
 * Encrypting password
 * @param password
 * returns salt and encrypted password
 */
public function hashSSHA($password) {

    $salt = sha1(rand());
    $salt = substr($salt, 0, 10);
    $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
    $hash = array(&quot;salt&quot; =&gt; $salt, &quot;encrypted&quot; =&gt; $encrypted);
    return $hash;
}

/**
 * Decrypting password
 * @param salt, password
 * returns hash string
 */
public function checkhashSSHA($salt, $password) {

    $hash = base64_encode(sha1($password . $salt, true) . $salt);

    return $hash;
}

}

 ?&gt;

Mein DatabaseHandler.java ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.minilotto.library;

   import java.util.HashMap;

   import android.content.ContentValues;
   import android.content.Context;
   import android.database.Cursor;
   import android.database.sqlite.SQLiteDatabase;
   import android.database.sqlite.SQLiteOpenHelper;

   public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = &quot;android_api&quot;;

// Login table name
private static final String TABLE_LOGIN = &quot;login&quot;;
private static final String TABLE_SESSION = &quot;session&quot;;

// Login Table Columns names
private static final String KEY_ID = &quot;id&quot;;
private static final String KEY_NAME = &quot;name&quot;;
private static final String KEY_EMAIL = &quot;email&quot;;
private static final String KEY_UID = &quot;uid&quot;;
private static final String KEY_CREATED_AT = &quot;created_at&quot;;
private static final String KEY_SID = &quot;sid&quot;;
private static final String KEY_SNAME = &quot;sname&quot;;    
private static final String KEY_SMAX = &quot;smax&quot;;
private static final String KEY_SBET = &quot;sbet&quot;;

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = &quot;CREATE TABLE &quot; + TABLE_LOGIN + &quot;(&quot;
            + KEY_ID + &quot; INTEGER PRIMARY KEY,&quot;
            + KEY_NAME + &quot; TEXT,&quot;
            + KEY_EMAIL + &quot; TEXT UNIQUE,&quot;
            + KEY_UID + &quot; TEXT,&quot;
            + KEY_CREATED_AT + &quot; TEXT&quot; + &quot;)&quot;;
    db.execSQL(CREATE_LOGIN_TABLE);

    String CREATE_SESSION_TABLE = &quot;CREATE TABLE &quot; + TABLE_SESSION + &quot;(&quot;
            + KEY_SID + &quot; INTEGER PRIMARY KEY,&quot;
            + KEY_SNAME + &quot; TEXT,&quot;
            + KEY_SMAX + &quot; TEXT,&quot;
            + KEY_SBET + &quot; TEXT,&quot;
            + KEY_CREATED_AT + &quot; TEXT&quot; + &quot;)&quot;;
    db.execSQL(CREATE_SESSION_TABLE);
}



// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL(&quot;DROP TABLE IF EXISTS &quot; + TABLE_LOGIN);
    db.execSQL(&quot;DROP TABLE IF EXISTS &quot; + TABLE_SESSION);
    // Create tables again
    onCreate(db);
}

/**
 * Storing session details in database
 * */
public void addSession(String sname, String smax, String sbet, String created_at) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_SNAME, sname); // Name
    values.put(KEY_SMAX, smax); // Email
    values.put(KEY_SBET, sbet); // Email
    values.put(KEY_CREATED_AT, created_at); // Created At

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



/**
 * Storing user details in database
 * */
public void addUser(String name, String email, String uid, String created_at) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, name); // Name
    values.put(KEY_EMAIL, email); // Email
    values.put(KEY_UID, uid); // Email
    values.put(KEY_CREATED_AT, created_at); // Created At

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

/**
 * Getting user data from database
 * */
public HashMap&lt;String, String&gt; getUserDetails(){
    HashMap&lt;String,String&gt; user = new HashMap&lt;String,String&gt;();
    String selectQuery = &quot;SELECT  * FROM &quot; + TABLE_LOGIN;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if(cursor.getCount() &gt; 0){
        user.put(&quot;name&quot;, cursor.getString(1));
        user.put(&quot;email&quot;, cursor.getString(2));
        user.put(&quot;uid&quot;, cursor.getString(3));
        user.put(&quot;created_at&quot;, cursor.getString(4));
    }
    cursor.close();
    db.close();
    // return user
    return user;
}

/**
 * Getting user login status
 * return true if rows are there in table
 * */
public int getRowCount() {
    String countQuery = &quot;SELECT  * FROM &quot; + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

public int getRowCount_Session() {
    String countQuery = &quot;SELECT  * FROM &quot; + TABLE_SESSION;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

/**
 * Re crate database
 * Delete all tables and create them again
 * */
public void resetTables(){
    SQLiteDatabase db = this.getWritableDatabase();
    // Delete All Rows
    db.delete(TABLE_LOGIN, null, null);
    db.close();
}


   }

und mein UserFunctions.java ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package com.minilotto.library;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.content.Context;

public class UserFunctions {

private JSONParser jsonParser;

// Testing in localhost using wamp or xampp 

private static String loginURL = &quot;xxxxxxxxxxxxxx/android_login_api/&quot;; // hab ich hier jetzt mal rausgenommen :)
private static String registerURL = &quot;xxxxxxxxxxxxxx/android_login_api/&quot;;
private static String sessionURL = &quot;xxxxxxxxxxxxxx//android_login_api/&quot;;

private static String login_tag = &quot;login&quot;;
private static String register_tag = &quot;register&quot;;
private static String session_tag = &quot;start_session&quot;;

// constructor
public UserFunctions(){
    jsonParser = new JSONParser();
}

public JSONObject openSession(String sname, String smax, String sbet){
    // Building Parameters
    List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
    params.add(new BasicNameValuePair(&quot;tag&quot;, session_tag));
    params.add(new BasicNameValuePair(&quot;sname&quot;, sname));
    params.add(new BasicNameValuePair(&quot;smax&quot;, smax));
    params.add(new BasicNameValuePair(&quot;sbet&quot;, sbet));
    JSONObject json = jsonParser.getJSONFromUrl(sessionURL, params);
    // return json
    // Log.e(&quot;JSON&quot;, json.toString());
    return json;
}

/**
 * function make Login Request
 * @param email
 * @param password
 * */
public JSONObject loginUser(String email, String password){
    // Building Parameters
    List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
    params.add(new BasicNameValuePair(&quot;tag&quot;, login_tag));
    params.add(new BasicNameValuePair(&quot;email&quot;, email));
    params.add(new BasicNameValuePair(&quot;password&quot;, password));
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
    // return json
    // Log.e(&quot;JSON&quot;, json.toString());
    return json;
}

/**
 * function make Login Request
 * @param name
 * @param email
 * @param password
 * */
public JSONObject registerUser(String name, String email, String password){
    // Building Parameters
    List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
    params.add(new BasicNameValuePair(&quot;tag&quot;, register_tag));
    params.add(new BasicNameValuePair(&quot;name&quot;, name));
    params.add(new BasicNameValuePair(&quot;email&quot;, email));
    params.add(new BasicNameValuePair(&quot;password&quot;, password));

    // getting JSON Object
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
    // return json
    return json;
}

/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count &gt; 0){
        // user logged in
        return true;
    }
    return false;
}


/**
 * Function get Session status
 * */
public boolean isSessionCreated(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount_Session();
    if(count &gt; 0){
        // user logged in
        return true;
    }
    return false;
} 


/**
 * Function to logout user
 * Reset Database
 * */
public boolean logoutUser(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    db.resetTables();
    return true;
}

/**
 * Function to end session
 * Reset Database
 * */
public boolean logoutSession(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    db.resetTables();
    return true;
}

  }

Antworten
Andreas S.
  • Forum-Beiträge: 76

14.06.2014, 13:21:19 via App

nach der Eintragung in die DB in der Methode storesession rufst du den Datensatz wieder ab. in der where abfrage vergleichst du so:
sid = $sid

muss sid nicht unique_sid und $sid $usid sein?

— geändert am 14.06.2014, 13:30:11

Antworten
Steve Brunner
  • Forum-Beiträge: 7

14.06.2014, 15:04:08 via Website

Genau, das habe ich auch schon entdeckt, nach stundenlangem Suchen ><

muss sid nicht unique_sid und $sid $usid sein?

soweit ich das durchschauen konnte beim Tutorial sind das verschiedene Werte, auch in der Datenbank sind das zwei verschiedene Spalten
die sid/uid werden von 0 auf hochgezählt - und die unique_sid/unique_uid sind generierte einmalige Werte. Ich selbst brauche das nicht, aber wollte das jetzt nicht ändern/löschen damit ich dem Tutorial folgen kann^^

aber gut danke, nun bekomme ich in JSON die eingetragenen werte.

eine nächste Frage: ich möchte, dass wenn der "eingeloggte" userA auf ein Feld drückt, seine Werte aus der mysql in eine andere tabelle transferiert werden.
das an sich werde ich schon hinbekommen denke ich - aber wie kann ich das umsetzen, dass die daten vom "eingeloggten" userA benutzt werden. im obigen code kann man sich ja einloggen, das klappt auch - aber ich selbst verstehe nicht, wo dieser eine Parameter steckt, der den Modus (logged in / logged out) besitzt.

Ich sehe nur lediglich im folgenden Code die Antwort der Frage, aber verstehe widerum nicht, wie da genau erfahren wird ob der User sich eingeloggt hat?

/**
 * Function get Login status
 * */
public boolean isUserLoggedIn(Context context){
    DatabaseHandler db = new DatabaseHandler(context);
    int count = db.getRowCount();
    if(count &gt; 0){
        // user logged in
        return true;
    }
    return false;
}
  • und wie weiß ich oder kann ich implementieren wie lange (Zeit) der User "logged in" ist?

Wenn mich da jemand aufklären könnte, wäre das super :)

Antworten