Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据id从数据库中获取信息_Java_Android_Sqlite - Fatal编程技术网

Java 如何根据id从数据库中获取信息

Java 如何根据id从数据库中获取信息,java,android,sqlite,Java,Android,Sqlite,我正在制作一个应用程序,将杂货添加到列表中,我有一个包含其所有属性的Product类,因此我尝试根据产品的Id从数据库表中获取产品并返回它,但它一直告诉我,每当我调用我的函数时,我的应用程序都会停止,这是我的代码 public Product GetProductById(String id) { SQLiteDatabase db=this.ourHelper.getReadableDatabase(); Product p=null; Cursor cr; c

我正在制作一个应用程序,将杂货添加到列表中,我有一个包含其所有属性的Product类,因此我尝试根据产品的Id从数据库表中获取产品并返回它,但它一直告诉我,每当我调用我的函数时,我的应用程序都会停止,这是我的代码

public Product GetProductById(String id)
{
    SQLiteDatabase db=this.ourHelper.getReadableDatabase();
    Product p=null;
    Cursor cr;
    cr = db.query(PRODUCTS_TABLE, null, PRODUCT_ID+"="+id, null, null, null, null);
    cr.moveToFirst();
    if(!cr.isAfterLast()) {
        p=new Product();
        p.setId(cr.getInt(0));
        p.setName(cr.getString(1));
        p.setQuantity(cr.getInt(2));
        p.setPrice(cr.getDouble(3));
        p.setAllergens(cr.getString(4));
        p.setPurchased(cr.getInt(5));
        p.setImage(cr.getBlob(6));
        p.setPriority(cr.getInt(7));
    }
    return p;
}
此代码不起作用,我不知道错误在哪里。 以下是我的数据库列(名称和类型…):


你能找出我的错误在哪里吗?

我相信你的问题是在调用GetProductById方法之前没有实例化我们的助手

如果没有,则会得到一个空指针异常,类似于:-

11-01 19:54:35.925 1420-1420/axtest.axtest E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{axtest.axtest/axtest.axtest.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 axtest.axtest.MainActivity.GetProductById(MainActivity.java:134)
        at axtest.axtest.MainActivity.onCreate(MainActivity.java:35)
        at android.app.Activity.performCreate(Activity.java:5008)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
        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) 
要解决这个问题,您需要按照

**`ourHelper = new DatabaseHelper(this);`**
注意Databasehelper可能不同(您没有说类名是什么),而且签名也可能不同(它将取决于Databasehelper中的代码,尽管签名通常如上所述)

否则,您的代码工作正常。但是,也可能是您更改了表的结构,但没有删除数据库。要排除此情况,请删除应用程序的数据并重新运行应用程序

**`ourHelper = new DatabaseHelper(this);`**