Aufbau einer grundlegenden SQLite basierte Login/Anmeldung App. Die App stürzt nach dem Login ab.Sqlite-Datenbank-Problem mit Android
Irgendwelche Gedanken?
DatabaseHelper.java:
05-11 06: 27: 30,850 3471-3471/com.example
package com.example.android.sqliteapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "contacts.db";
// User table name
private static final String TABLE_NAME = "contacts";
// User Table Columns names
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_EMAIL = "email";
private static final String COLUMN_UNAME = "uname";
private static final String COLUMN_PASS = "pass";
SQLiteDatabase db;
// create table sql query
private static final String TABLE_CREATE = "create table contacts (id integer primary key not null , " +
"name text not null, email text not null, uname text not null, pass text not null)";
// constructor
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
this.db = db;
}
// inserting data from SignUp to DB
public void insertContact(Contact c){
db = this.getWritableDatabase();
ContentValues values = new ContentValues();
String query = "select * from " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
int count = cursor.getCount();
values.put(COLUMN_ID, count); // each contact will have unique IDs counting from 0 upwards
values.put(COLUMN_NAME, c.getName());
values.put(COLUMN_EMAIL, c.getEmail());
values.put(COLUMN_UNAME, c.getUname());
values.put(COLUMN_PASS, c.getPass());
db.insert(TABLE_NAME, null, values); // this will officially insert the contact object into the DB
db.close(); // close it
}
// this is where the search password method is created
public String searchPass(String uname) {
db = this.getReadableDatabase();
String query = "select * from " + TABLE_NAME;
Cursor cursor = db.rawQuery(query, null);
String a, b;
b = "not found";
if (cursor.moveToFirst()) {
do {
a = cursor.getString(cursor.getColumnIndex(COLUMN_UNAME));
if (a.equals(uname)) {
b = cursor.getString(cursor.getColumnIndex(COLUMN_PASS));
break;
}
}
while(cursor.moveToNext());
}
return b; // b is the returned password
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop User Table if exist
String query = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(query);
// Create tables again
this.onCreate(db);
}
}
Die App jetzt Login
Fehlerprotokoll nach der Kollision mit abstürzt. android.sqliteapp E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.beispiel.android.sqliteapp, PID: 3471 java.lang.IllegalStateException: konnte Methode für android nicht ausführen: onClick bei android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInFlater.java:293) bei android.view.View.performClick (View.java:5637) bei android.view.View $ PerformClick.run (View.java:22429) bei android.os.Handler.handleCallback (Handler.java:751) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper. Java: 154) bei android.app.ActivityThread.main (ActivityThread.java:6119) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) verursacht durch: java.lang.reflect.InvocationTargetException bei java.lang.reflect.Method.invoke (native Methode) bei android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:288) bei android.view.View.performClick (View.java:5637) bei android.view.View $ Perform .run (View.java:22429) bei android.os.Handler.handleCallback (Handler.java:751) bei android.os.Handler.dispatchMessage (Handler.java:95) bei andr oid.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java:6119) bei java.lang.reflect.Method.invoke (native Methode) bei com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) verursacht durch: android.content.ActivityNotFoundException: Kann nicht gefunden werden explizite Aktivitätsklasse {com.beispiel.android.sqliteapp/com.example.android.sqliteapp.Display}; Hast du diese Aktivität in deiner AndroidManifest.xml deklariert? bei android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1805) bei android.app.Instrumentation.execStartActivity (Instrumentation.java:1523) bei android.app.Activity.startActivityForResult (Activity.java:4225) bei android.support.v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:50) bei android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:79) bei android.app.Activity.startActivityForResult (Aktivität. Java: 4183) bei android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:859) bei android.app.Activity.startActivity (Activity.java:4522) bei android.app.Activity.startActivity (Activity.java:4490) bei com.example.android. sqliteapp.MainActivity.onButtonClick (MainActivity.java:36) bei java.lang.reflect.Method.invoke (systemeigene Methode) bei android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInFlater.java:288) bei android.view.View.Click (View.java:5637) bei android.view.View $ PerformClick.run (View.java:22429) bei android.os.Handler.handleCallback (Handler .java: 751) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:154) bei android.app.ActivityThread.main (ActivityThread.java : 6119) bei java.lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) bei com.android.internal.os. ZygoteInit.main (ZygoteInit.java:776)
MainActivity Java:
package com.example.android.sqliteapp;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
DatabaseHelper helper = new DatabaseHelper(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onButtonClick(View v) {
// if user clicks on LOGIN
if (v.getId() == R.id.bLogin) {
// Grab all Username and Password input
EditText a = (EditText) findViewById(R.id.etUsername);
String str = a.getText().toString();
EditText b = (EditText) findViewById(R.id.etPassword);
String pass = b.getText().toString();
String password = helper.searchPass(str);
if (pass.equals(password)) {
Intent i = new Intent(MainActivity.this, Display.class);
i.putExtra("Username", str);
startActivity(i);
}
else {
Toast temp = Toast.makeText(MainActivity.this, "Username and Password don't match!", Toast.LENGTH_SHORT);
temp.show();
}
}
if (v.getId() == R.id.bSignup) {
Intent i = new Intent(MainActivity.this, SignUp.class);
startActivity(i);
}
}
}
Display.java:
package com.example.android.sqliteapp;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class Display extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
String username = getIntent().getStringExtra("Username");
TextView tv = (TextView) findViewById(R.id.tvUsername);
tv.setText(username);
}
}
Contact.java:
package com.example.android.sqliteapp;
public class Contact {
private int id;
private String name;
private String email;
private String uname;
private String pass;
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUname() {
return this.uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPass() {
return this.pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
Soweit ich sehen kann, Index 2 ist nicht "uname".Wenn Sie 'SELECT *' verwenden, erhalten Sie auch die 'id', was bedeutet, dass' uname' in Spalte 3 ist – 0xDEADC0DE
Fehler betrifft etwas anderes, von wo Sie onButtonClick() aufrufen? –
Es ist im Allgemeinen besser, eine neue Frage zu stellen, wenn Sie ein neues Problem haben. Wie Sie sonst alle Antworten falsch machen, da sich die Frage geändert hat. Siehe unten für meine Antwort auf Ihr neues Problem. – Doomsknight