2017-12-20 6 views
-2

私は実際に自分のアプリケーションにSQLiteデータベースを実装し、ログインアクティビティを作成しました。アプリケーションが起動すると、ログインアクティビティが開始され、そこでデータベースにアクセスします。ユーザーが名前とパスワードを入力して「anmelden」を押すと、データベースはユーザーがすでに存在するかどうかを確認し、そうであればパスワードが正しいかどうかをチェックし、正しい場合はアクティビティが終了し、ユーザーは続行できます。パスワードが間違っていてもユーザーが存在する場合、何も起こらずトーストが表示されます。指定された名前を持つユーザーがいない場合、そのユーザーはそのパスワードと名前で作成されます。AndroidのSQLiteユーザーログインが機能しません

新しいユーザーを作成するとすべてうまくいくようですが、アプリを再起動して同じデータでログインしようとすると、新しいユーザーが作成されます。

私は悲しいことに、私はこれは私です間違い

を見つけることができませんので、私は根ざし電話気圧を持っていないので、私はあなたたちが私を助けることを願ってcuzのこれは、データベースにどのように見えるか言うことができません"Anmeldung"(ログイン)クラス

public class Anmeldung extends Activity { 
public Datasource datasource = new Datasource(this); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.activity_anmeldung); 
} 

//// OnClick-Methoden 

/// public void anmelden(View view) {//the Login method 

    EditText t = (EditText) findViewById(R.id.editText_username); 
    String name = t.getText().toString(); 
    EditText e = (EditText) findViewById(R.id.editText_passwort); 
    String psswd = e.getText().toString(); 
    datasource.open(); 
    if (datasource.UserExists(name)) { 
     if (datasource.correctPassword(name, psswd)) { 
      datasource.close(); 

      finish(); 
     } else { 
      @SuppressLint("WrongConstant") Toast toast = Toast.makeText(getApplicationContext(), "Falsches Passwort", 3); 
      toast.show(); 
     } 
    } else { 
     datasource.createUser(name, psswd, 0, 0); 
     @SuppressLint("WrongConstant") Toast toast = Toast.makeText(getApplicationContext(), "Neuen Nutzer erstellt", 3); 
     toast.show(); 

     finish(); 
    } 


} 

}

これは、関連するすべてのメソッド

public class Datasource { 
//Log-Tag 
private static final String LOG_TAG = Datasource.class.getSimpleName(); 
//Datenbankspezifische Variablen 
private SQLiteDatabase database; 
private Datahelper dbHelper; 
private String[] columns = {Datahelper.COLUMN_ID, Datahelper.COLUMN_TYPE, Datahelper.COLUMN_NAME, Datahelper.COLUMN_EXPIRATION, Datahelper.COLUMN_OWNER}; 
private String[] columns_users = {Datahelper.COLUMN_ID_USERS, Datahelper.COLUMN_NAME_USERS, Datahelper.COLUMN_PSSWD_USERS, Datahelper.COLUMN_SOAP_USERS, Datahelper.COLUMN_EP_USERS}; 
private String[] column_id_user = {Datahelper.COLUMN_ID_USERS}; 
private String[] column_name_user = {Datahelper.COLUMN_NAME_USERS}; 
private String[] column_psswd_user = {Datahelper.COLUMN_PSSWD_USERS}; 

//Konstruktor 
public Datasource(Context context) { 
    Log.d(LOG_TAG, "DataSource is now creating the dbHelper"); 
    dbHelper = new Datahelper(context); 
} 

//Öffnen der Datenbank 
public void open() { 
    Log.d(LOG_TAG, "asking for reference"); 
    database = dbHelper.getWritableDatabase(); 
    Log.d(LOG_TAG, "received reference. path: " + database.getPath()); 

} 

//Schließen der Datenbank 
public void close() { 
    dbHelper.close(); 
    Log.d(LOG_TAG, "closed database"); 
} 








public User createUser(String name, String psswd, long soap, long ep) { 
    ContentValues c = new ContentValues(); 
    c.put(Datahelper.COLUMN_NAME_USERS, name); 
    c.put(Datahelper.COLUMN_PSSWD_USERS, psswd); 
    c.put(Datahelper.COLUMN_SOAP_USERS, soap); 
    c.put(Datahelper.COLUMN_EP_USERS, ep); 
    long insId = database.insert(Datahelper.TABLE_USERS, null, c); 
    Cursor cursor = database.query(Datahelper.TABLE_USERS, columns_users, Datahelper.COLUMN_ID_USERS + "=" + insId, null, null, null, null); 
    cursor.moveToLast(); 
    return cursorToUser(cursor); 
} 

private User cursorToUser(Cursor cursor) { 

    int idId = cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS); 
    int idName = cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS); 
    int idPsswd = cursor.getColumnIndex(Datahelper.COLUMN_PSSWD_USERS); 
    int idSoap = cursor.getColumnIndex(Datahelper.COLUMN_SOAP_USERS); 
    int idEp = cursor.getColumnIndex(Datahelper.COLUMN_EP_USERS); 
    long id = cursor.getLong(idId); 
    String name = cursor.getString(idName); 
    String psswd = cursor.getString(idPsswd); 
    long soap = cursor.getLong(idSoap); 
    long ep = cursor.getLong(idEp); 
    return new User(id, name, psswd, soap, ep); 

} 

public boolean UserExists(String name) { 
    try { 
     Cursor cursor = database.query(Datahelper.TABLE_USERS, column_id_user, Datahelper.COLUMN_NAME_USERS + " = " + name, null, null, null, null); 
     long id = cursor.getLong(cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS)); 
     cursor = database.query(Datahelper.TABLE_USERS, column_name_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null); 
     String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS)); 
     return true; 
    } catch (Exception e) { 
    } 
    return false; 
} 

public boolean correctPassword(String name, String psswd) { 
    try { 


     Cursor cursor = database.query(Datahelper.TABLE_USERS, column_id_user, Datahelper.COLUMN_NAME_USERS + " = " + name, null, null, null, null); 
     long id = cursor.getLong(cursor.getColumnIndex(Datahelper.COLUMN_ID_USERS)); 
     cursor = database.query(Datahelper.TABLE_USERS, column_name_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null); 
     String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS)); 
     cursor = database.query(Datahelper.TABLE_USERS, column_psswd_user, Datahelper.COLUMN_ID_USERS + " = " + id, null, null, null, null); 
     String p = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_PSSWD_USERS)); 
     if (n == name && psswd == p) return true; 
    } catch (Exception e) { 
    } 
    return false; 
} 
と私のデータソースクラスであります

}

は、あなたが何か他のものが必要な場合は教えてくれ、私を助けることができると思います:)

LOG:

12-20 20:33:56.684 24009-24009/com.ein_siedler.putzplaner D/Datasource: asking for reference 
12-20 20:33:56.689 24009-24009/com.ein_siedler.putzplaner D/Datasource: received reference. path: /data/user/0/com.ein_siedler.putzplaner/databases/task_list.db 
12-20 20:33:56.690 24009-24009/com.ein_siedler.putzplaner E/SQLiteLog: (1) no such column: Test 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err: android.database.sqlite.SQLiteException: no such column: Test (code 1): , while compiling: SELECT _id FROM table_users WHERE name = Test 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
12-20 20:33:56.696 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
12-20 20:33:56.697 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1328) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1175) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1046) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1214) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at com.ein_siedler.putzplaner.Datasource.UserExists(Datasource.java:139) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at com.ein_siedler.putzplaner.activities.Anmeldung.anmelden(Anmeldung.java:50) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.view.View$DeclaredOnClickListener.onClick(View.java:4463) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.view.View.performClick(View.java:5233) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.view.View$PerformClick.run(View.java:21211) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
12-20 20:33:56.698 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-20 20:33:56.699 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.os.Looper.loop(Looper.java:148) 
12-20 20:33:56.699 24009-24009/com.ein_siedler.putzplaner W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5539) 
12-20 20:33:56.699 24009-24009/com.ein_siedler.putzplaner W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
12-20 20:33:56.699 24009-24009/com.ein_siedler.putzplaner W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
12-20 20:33:56.699 24009-24009/com.ein_siedler.putzplaner W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-20 20:33:56.743 24009-24009/com.ein_siedler.putzplaner D/AppTracker: App Event: stop 
12-20 20:33:56.795 24009-24009/com.ein_siedler.putzplaner D/AppTracker: App Event: start 
12-20 20:33:56.872 24009-24009/com.ein_siedler.putzplaner D/AbstractTracker: Event success 
12-20 20:33:56.878 24009-24009/com.ein_siedler.putzplaner D/AbstractTracker: Event success 
12-20 20:33:56.955 24009-24146/com.ein_siedler.putzplaner D/OpenGLRenderer: endAllStagingAnimators on 0xb35ec380 (RippleDrawable) with handle 0x9f07c660 

DatahHelperクラス:

class Datahelper extends SQLiteOpenHelper { 
//Strings für Datenbank 
public static final String DB_NAME = "task_list.db"; 
public static final int DB_VERSION = 1; 
public static final String TABLE_TASK_LIST = "task_list"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_TYPE = "type"; 
public static final String COLUMN_NAME = "name"; 
public static final String COLUMN_EXPIRATION = "expiration"; 
public static final String COLUMN_OWNER = "owner"; 
public static final String SQL_CREATE = "CREATE TABLE " + TABLE_TASK_LIST + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_TYPE + " TEXT NOT NULL, " + COLUMN_NAME + " TEXT NOT NULL, " + COLUMN_EXPIRATION + " TEXT NOT NULL, " + COLUMN_OWNER + " TEXT NOT NULL);"; 
public static final String TABLE_USERS = "table_users"; 
public static final String COLUMN_ID_USERS = "_id"; 
public static final String COLUMN_NAME_USERS = "name"; 
public static final String COLUMN_PSSWD_USERS = "psswd"; 
public static final String COLUMN_SOAP_USERS = "soap"; 
public static final String COLUMN_EP_USERS = "ep"; 
public static final String SQL_CREATE_USERS = "CREATE TABLE " + TABLE_USERS + "(" + COLUMN_ID_USERS + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME_USERS + " TEXT NOT NULL, " + COLUMN_PSSWD_USERS + " TEXT NOT NULL, " + COLUMN_SOAP_USERS + " INTEGER, " + COLUMN_EP_USERS + " INTEGER);"; 
private static final String LOG_TAG = Datahelper.class.getSimpleName(); 

public Datahelper(Context context) { 
    //Konstruktor 
    super(context, DB_NAME, null, DB_VERSION); 
    Log.d(LOG_TAG, "Succesfully created database: " + getDatabaseName()); 


} 

//Erstellen einer neuen Datenbank 
@Override 
public void onCreate(SQLiteDatabase db) { 
    try { 

     Log.d(LOG_TAG, "creating table " + SQL_CREATE); 
     db.execSQL(SQL_CREATE); 
     db.execSQL(SQL_CREATE_USERS); 
    } catch (Exception ex) { 
     Log.d(LOG_TAG, "Error while creating table: " + ex.getMessage()); 
    } 

} 

//Änderung an Struktur 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

}

エラーコードを書き換えた後ログする しかし、 tはまさに私があなたのDatasourceクラスに間違って何かがあると思うし、あなたのUserExists関数がfalseを返す。この

12-21 07:53:25.097 22705-22705/com.ein_siedler.putzplaner W/System.err:  android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) 
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
12-21 07:53:25.098 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at com.ein_siedler.putzplaner.Datasource.UserExists(Datasource.java:141) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at com.ein_siedler.putzplaner.activities.Anmeldung.anmelden(Anmeldung.java:47) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.view.View$DeclaredOnClickListener.onClick(View.java:4463) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.view.View.performClick(View.java:5233) 
12-21 07:53:25.099 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.view.View$PerformClick.run(View.java:21211) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.os.Looper.loop(Looper.java:148) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5539) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
12-21 07:53:25.100 22705-22705/com.ein_siedler.putzplaner W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

'' の間でなければなりません'catch'ブロックの' UserExists'は 'e.printStackTrace()'というステートメントを追加してログを確認し、エラーのログを確認することができます。原因を教えてください! – Xenolion

+0

私はすでにスタックトレースを追加してログを投稿しましたが、コードには含まれていませんが、すでに誰かに尋ねられました –

答えて

-1

をフォーマットする方法を知っています。すべてのtry-catchのcatch例外セクションでe.printStackTrace();が見つかりませんでしたので、エラーは表示されませんdatasourceクラスのすべてのtry-catchにe.printStackTrace();を設定してアプリを再構築して実行してみてください。そこに表示Catlog ...

更新:

すると、この機能を試してみてください:

public boolean UserExists(String name) { 
    try { 
     Cursor cursor = database.query(Datahelper.TABLE_USERS, null, Datahelper.COLUMN_NAME_USERS + " = '" + name + "'", null, null, null, null); 
     String n = cursor.getString(cursor.getColumnIndex(Datahelper.COLUMN_NAME_USERS)); 
     return true; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

チェック二回あなたは、SQLクエリで文字列値を使用している場合、それは `あなたの方法で

+0

ログが追加されましたが、pritty shittyと思われます –

+0

DataHelperクラスに問題があります。 –

+0

はデータヘルパークラス –

関連する問題