java - 使用 SQLite 在 android 中忘记密码
问题描述
我实施了忘记密码,但出现错误。我的数据库包含数据。
这是日志猫:
“E/AndroidRuntime:致命异常:主进程:com.example.admin.myapplication,PID:8265 java.lang.NullPointerException:尝试调用虚拟方法'java.lang.Boolean com.example.admin.myapplication.DatabaseHelper.updatepwd (java.lang.String, java.lang.String)' 在 com.example.admin.myapplication.Reset$1.onClick(Reset.java:39) 在 android.view.View.performClick(View. java:4780) 在 android.view.View$PerformClick.run(View.java:19866) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95 ) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang。 com.android.internal.os.ZygoteInit$MethodAndArgsCaller 上的 reflect.Method.invoke(Method.java:372)。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 处运行 (ZygoteInit.java:903)"
以下是我使用的以下代码:
重置.java
public class Reset extends AppCompatActivity {
TextView phone;
EditText pwd,cpwd;
Button resetbtn;
DatabaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reset);
phone = (TextView)findViewById(R.id.Phonenumber);
pwd = (EditText) findViewById(R.id.pssword);
cpwd = (EditText) findViewById(R.id.pwdreenter);
resetbtn = (Button) findViewById(R.id.btnReset);
Intent intent = getIntent();
phone.setText(intent.getStringExtra("phone"));
resetbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String user = phone.getText().toString();
String pswd = pwd.getText().toString();
String repswd = cpwd.getText().toString();
if (pswd.equals(repswd)) {
Boolean pwd = db.updatepwd(user, pswd);
if (pwd) {
Intent intent1 = new Intent(getApplicationContext(), Login.class);
startActivity(intent1);
Toast.makeText(Reset.this, "Password Updated Successfully", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Reset.this, "Password NotUpdated Successfully", Toast.LENGTH_SHORT).show();
}
}
else {
Toast.makeText(getApplicationContext(), "Password Don't Match", Toast.LENGTH_SHORT).show();
}
}
});
//new code
public class MyTestDatabaseInstanceHolder {
public MyTestDBHandler DBHelper;
public static SQLiteDatabase m_ObjDataBase;
public static void createDBInstance(Context pContext){
if(DBHelper == null) {
DBHelper = new WLDBHandler(pContext);
m_cObjDataBase = DBHelper.openAndCreateDataBase();
}
}
}
db.java
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "application.db";
public static final String TABLE_SIGNUP = "Signup";
public static final String COL_ID = "USER_ID";
public static final String COL_NAME = "NAME";
public static final String COL_PHONE = "PHONE_NUMBER";
public static final String COL_EMAIL = "EMAIL";
public static final String COL_PASSWORD = "PASSWORD";
public static final String COL_CONFIRMPASSWORD = "CONFIRMPASSWORD";
public static final String COL_NAMEone_CON = "NAMEONE";
public static final String COL_NUMBERone_CON = "NUMBERONE";
public static final String COL_NAMEtwo_CON = "NAMETWO";
public static final String COL_NUMBERtwo_CON = "NUMBERTWO";
public static final String COL_NAMEthree_CON = "NAMETHREE";
public static final String COL_NUMBERthree_CON = "NUMBERTHREE";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 3);
// SQLiteDatabase db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_SIGNUP + "(" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , "
+ COL_NAME + " VARCHAR(255) , " + COL_PHONE + " VARCHAR (255) UNIQUE ," + COL_EMAIL + " VARCHAR (255) UNIQUE," + COL_PASSWORD + " VARCHAR (255), "
+ COL_CONFIRMPASSWORD + " VARCHAR (255)," + COL_NAMEone_CON + " VARCHAR (255), "
+ COL_NUMBERone_CON + " VARCHAR (255) UNIQUE ," + COL_NAMEtwo_CON + " VARCHAR (255)," + COL_NUMBERtwo_CON + " VARCHAR (255) UNIQUE , "
+ COL_NAMEthree_CON + " VARCHAR (255)," + COL_NUMBERthree_CON + " VARCHAR (255) UNIQUE " + ")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SIGNUP);
onCreate(db);
}
Boolean updatepwd(String PHONE_NUMBER, String PASSWORD) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("PASSWORD", PASSWORD);
long res= db.update("Signup", contentValues, "PHONE_NUMBER = ?", new String[]{PHONE_NUMBER});
db.close();
if(res == -1)
return false;
else
return true;
}
解决方案
推荐阅读
- sql - 在今天的日期之后生成具有偶数天的 n 个连续日期(例如,对于 2020-06-08,它将是 2020-06-10、2020-06-12、2020-06-14 等)
- php - 如何将 SSH 隧道反向到 Xdebug 的远程 docker 容器?
- ruby-on-rails - Ruby 将 Java 字节缓冲区对象转换为字符串
- javascript - 我可以使用函数生成器作为事件处理程序吗?
- sql - 在这种情况下,SQL Server 完全联接如何返回额外的行?
- r - expss 打包成 Markdown PDF
- r - ggplot2:如何让 Geom 类影响 ScaleContinuous 类
- soapui - 将 SOAPUI 中的查询参数定义为变量
- javascript - 如何在javascript中的函数内使用循环
- r - 在 ggplot2 R 中绘制年度比较和时间分布