android - 不选择行 sqlite android studio
问题描述
请帮助我/我有 android studio 程序
我想选择表用户的 ID,但是当我在所有活动中编写代码时,它不会显示我的结果我的应用程序销毁它只在一个我不需要它的活动中工作我的数据库代码
我创建了 3 个表
String qry = "create table user (idT1 INTEGER PRIMARY KEY AUTOINCREMENT ,fname TEXT , Lname TEXT, pass TEXT, Phone TEXT, email TEXT,DRorP TEXT)";
//if user is Patient Create table for patient
String qry3 =
"create table patientInformation (idTPatient INTEGER PRIMARY KEY AUTOINCREMENT,age INTEGER , city TEXT, adress TEXT, grup TEXT ,MorF TEXT,idT1 INTEGER ,FOREIGN KEY (idT1) \n"+
" REFERENCES user (idT1) \n"+
" ON DELETE CASCADE \n" +
" ON UPDATE NO ACTION)";
//if user is DOCTOR Create table for DR
String qry2 =
"create table DrInformational (idT2 INTEGER PRIMARY KEY AUTOINCREMENT, pspor TEXT , brwanama TEXT, taman INTEGER , city TEXT,adress TEXT ,MorF TEXT ,idT1 INTEGER , FOREIGN KEY (idT1) \n" +
" REFERENCES user (idT1) \n" +
" ON DELETE CASCADE \n" +
" ON UPDATE NO ACTION)";
db.execSQL(qry);
db.execSQL(qry2);
db.execSQL(qry3);
然后我在 MainActivity 中有一个登录页面,它的所有代码当我运行它时没问题,我的程序运行正确
package com.example.myapplication;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
static MyDB myDB;
// static Db2 Db2;
EditText name,pass;
public static String name2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(EditText)findViewById(R.id.username);
pass=(EditText)findViewById(R.id.password);
myDB = new MyDB(this);
// Db2 = new Db2(this);
}
public void loginCheck(View v) {
String email = name.getText().toString().trim();
String passwordd = pass.getText().toString().trim();
Cursor c = MainActivity.myDB.LoginCheck(email);
c.moveToFirst();
if (c == null) {
Toast.makeText(MainActivity.this, "invalid " + email, Toast.LENGTH_LONG).show();
name.setText("");
pass.setText("");
}
else {
name2 = c.getString(0);
String pass2 = c.getString(1);
String dr=c.getString(2);
if (passwordd.equals(pass2)) {
if(dr.equals("دکتۆر")) {
Intent i = new Intent(MainActivity.this, DrActivity.class);
i.putExtra("name", name2);
startActivity(i);
}
else {
Intent i = new Intent(MainActivity.this, Patientpage.class);
i.putExtra("name", email);
startActivity(i);
finish();
}
}
else {
Toast.makeText(MainActivity.this, "invalid ", Toast.LENGTH_LONG).show();
}
name.setText("");
pass.setText("");
}
}
public void register(View view){
Intent i=new Intent(MainActivity.this, RegisterActivity.class);
startActivity(i);
}
public static String getname(){
return name2;
}
}
我插入了一些行它运行正确我没有问题
但是当我想在表用户中选择 idT1 时,我的程序会破坏
我的 DBMS 类中的 select 语句
public Cursor selectQ(){
try{
String qry= "SELECT MAX(idT1) FROM user";
SQLiteDatabase db=getWritableDatabase();
Cursor c=db.rawQuery(qry,null);
return c;
}
catch (Exception e){
Log.e("MYDB", "login Error",e);
return null;
}
}
当我写这个时,我在我的 MainActivity 类中使用了这个代码我有一个错误
Cursor a = myDB.selectQ();
while (a.moveToNext()) {
String b= a.getString(0);
System.out.println(b);
}
这是我的例外
01-04 19:21:29.293 1333-1333/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
解决方案
推荐阅读
- java - HttpURLConnection:写入OutputStream,得到响应
- c# - 按球体上的位置对 Vector3s 进行排序
- java - BufferedReader 从 CMD processbuilder (JAVA) 读取输出的问题?
- javascript - 为什么我对 ipcMain 的回复按字母顺序排序?
- c++ - 如何编写带有模板函数参数的包装函数,它可以采用重载的成员函数?
- javascript - 从版本 2.3.0 到 4.3.0 的 Angular 迁移,mapValuesToArray 符号问题
- python - 将 Dash 用作 Figure 的错误作为传递给 Graph 的无效参数“figure.layout”,预期为“对象”。提供类型“数组”
- sitecore - 默认体验分析仪表板报告的自定义过滤
- java - 使用休眠返回查询的错误计数值
- android - 运行cordova run android时依赖失败