首页 > 解决方案 > 不选择行 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)

标签: androidsqliteandroid-sqlitesqliteopenhelper

解决方案


推荐阅读