기본 sqlite 기반 로그인/앱 만들기. 로그인을 클릭하면 앱이 다운됩니다.Sqlite 데이터베이스 문제 (안드로이드)
의견이 있으십니까?
DatabaseHelper.java : 응용 이제 로그인을
오류 로그를 타격 한 후 충돌되는
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);
}
}
: 27 :
6월 5일에서 11일까지 30.850 3471-3471/com.example. android.sqliteapp E/AndroidRuntime : 치명적인 예외 : 주 프로세스 : com.example.android.sqliteapp, PID : 3471 java.lang.IllegalStateException : android : onClick에 대한 메소드를 실행할 수 없습니다. android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:293) at android.view.View.performClick (View.java:5637) android.view.View $ PerformClick.run (View.java : 22429) android.os.Handler.handleCallback (Handler.java:751) at android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (루퍼. java : 154) android.app.ActivityThread.main (ActivityThread.java:6119) at java.lang.reflect.Method.invoke (기본 메소드) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) 에 의해 발생 : java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke 네이티브 메소드) android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:288) at android.view.View.performClick (View.java:5637) android.view.View $ PerformClick .run (View.java:22429) at android.os.Handler.handleCallback (Handler.java:751) at android.os.Handler.dispatchMessage (Handler.java:95) at andr oid.os.Looper.loop (Looper.java:154) android.app.ActivityThread.main (ActivityThread.java:6119) at java.lang.reflect.Method.invoke (기본 메소드) 에서 com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) 에 의해 발생했습니다. android.content.ActivityNotFoundException : 찾을 수 없습니다. 명시 적 활동 클래스 {com.example.android.sqliteapp/com.example.android.sqliteapp.Display}; AndroidManifest.xml에서이 활동을 선언하셨습니까? android.app.Activity.startActivityForResult에서 android.app.Instrumentation.execStartActivity (Instrumentation.java:1523) 에서 android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1805) (Activity.java:4225) 에서 에서 android.support.v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:50) android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:79) android.app.Activity.startActivityForResult (활동. java : 4183) android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java:859) android.app.Activity.startActivity (Activity.java:4522) at android.app.Activity.startActivity (Activity.java:4490) at com.example.android. (기본 메소드) android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:288) android.view.View.performClick (View.java:5637) android.view.View $ PerformClick.run (View.java:22429) (android.os.Handler.handleCallback (Handler))에 있습니다. .java : 751) android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java : 6119) at java.lang.reflect.Method.invoke (네이티브 메소드) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) at com.android.internal.os. ZygoteInit.main (ZygoteInit.java:776)
MainActivity 자바 :
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;
}
}
내가 알 수있는 한, 색인 2는 'uname'이 아닙니다.'SELECT *'를 사용하면'id'도 얻습니다. 즉, uname이 3 열에있을 것입니다. – 0xDEADC0DE
오류는 onButtonClick()을 호출 한 곳에서 뭔가 다른 것입니까? –
새로운 문제가있는 경우 일반적으로 새로운 질문을 게시하는 것이 좋습니다. 그렇지 않으면 질문이 변경되면서 모든 대답이 부정확하게됩니다. 당신의 새로운 문제에 대한 나의 답은 아래를보십시오. – Doomsknight