我正在将SQLite设置到我的应用程序注册页面,我想使用手机号码而不是电子邮件进行注册。我的应用程序没有显示任何错误,但是吐司(“已成功注册”)从未出现,并且活动mainWindow
从未开始。
我的数据库文件在下面
public class DatabaseHelp extends SQLiteOpenHelper {
public DatabaseHelp( Context context) {
super(context,"Login.db",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("Create table user(First_NAME text ,Last_NAME text,mobile number primary key ,password text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists user");
}
//inserting in database
public boolean insert(String First_NAME,String Last_NAME,String mobile,String password){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("Fisrt Name",First_NAME);
contentValues.put("Last Name",Last_NAME);
contentValues.put("Mobile Number",mobile);
contentValues.put("Password",password);
long ins=db.insert("user",null,contentValues);
if(ins==-1) {return false;}
else{ return true;}
}
// if number exists
public Boolean chkemail(String mobile){
SQLiteDatabase db= this.getWritableDatabase();
Cursor cursor=db.rawQuery("Select * from user where mobile=?",new String[]{mobile});
if(cursor.getCount()>0) return false;
else return true;
}
}
我的注册页面Java文件位于下面
public class signup extends AppCompatActivity {
DatabaseHelp db;
EditText e1,e2,e3,e4,e5;
Button b1;
public void onClick(View view){
Intent i1 = new Intent(this, forgotpass2.class);
startActivity(i1);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
db=new DatabaseHelp(this);
e1=(EditText)findViewById(R.id.editText5);
e2=(EditText)findViewById(R.id.editText6);
e3=(EditText)findViewById(R.id.editText);
e4=(EditText)findViewById(R.id.editText7);
e5=(EditText)findViewById(R.id.editText8);
b1=(Button)findViewById(R.id.button);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s1=e1.getText().toString();
String s2=e2.getText().toString();
String s3=e3.getText().toString();
String s4=e4.getText().toString();
String s5=e5.getText().toString();
if(s1.equals("")||s2.equals("")||s3.equals("")||s4.equals("")||s5.equals("")) {
Toast.makeText(getApplicationContext(), "Fields are empty", Toast.LENGTH_SHORT).show();
} else {
if(s4.equals(s5)){
Boolean chkemail=db.chkemail(s3);
if(chkemail == true) {
Boolean insert = db.insert(s1,s2,s3,s4);
if(insert == true) {
Toast.makeText(getApplicationContext(),"Registered Successfully",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(),"Mobile Number already exits",Toast.LENGTH_SHORT).show();
}
}
Toast.makeText(getApplicationContext(),"Passwords do not match",Toast.LENGTH_SHORT).show();
}
}
});
}
}
我应该怎么做才能使代码正常工作?
答案 0 :(得分:1)
您的代码中有几点需要指出。首先,关于insert
函数,列名带有空格,我认为您应该删除SQLite列名的那些空格。如下修改您的insert
函数。
public boolean insert(String First_NAME,String Last_NAME,String mobile,String password){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("first_name",First_NAME);
contentValues.put("last_name",Last_NAME);
contentValues.put("mobile",mobile);
contentValues.put("password",password);
long ins=db.insert("user",null,contentValues);
if(ins==-1) return false;
else return true;
}
现在,一旦完成此操作,我认为您的chkemail
函数现在可以正常工作。因为,以前在数据库表中找不到字段mobile
,因为列名是不同的(即,您代码中的列名是Mobile Number
,我在insert
函数中进行了更改以与查询匹配)。
public boolean chkemail(String mobile){
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("Select * from user where mobile=?",new String[]{mobile});
if(cursor.getCount()>0) return false;
else return true;
}
请注意,我已将chkemail
函数的返回类型从Boolean
更改为boolean
。
最后,在signup
活动中,您还需要修改下面提到的部分。
// Changed from Boolean to boolean
boolean insert = db.insert(s1,s2,s3,s4);
if(insert == true) {
Toast.makeText(getApplicationContext(),"Registered Successfully",Toast.LENGTH_SHORT).show();
// Start the new activity here
Intent newIntent = new Intent(this, mainWindow.class);
startActivity(newIntent);
}
希望有帮助!