Android/SQLITE应用程序上的NullPointer异常错误

Android/SQLITE应用程序上的NullPointer异常错误,android,sqlite,Android,Sqlite,所以,我正在开发一个应用程序,它应该可以播放“\sdcard\movies”中的视频,要做到这一点,它必须查阅我数据库中的一个表。但是,select查询在以下行上返回nullpointer异常: Cursor query=myDataBase.rawQuery(“通过UltimaExecucao ASC从商业订单中选择Arquivo,随机描述限制1”,空); 这是我的代码: DBHandler.java public类DBHandler扩展了SQLiteOpenHelper{ 私有静态字符串D

所以,我正在开发一个应用程序,它应该可以播放“\sdcard\movies”中的视频,要做到这一点,它必须查阅我数据库中的一个表。但是,select查询在以下行上返回nullpointer异常:

Cursor query=myDataBase.rawQuery(“通过UltimaExecucao ASC从商业订单中选择Arquivo,随机描述限制1”,空);
这是我的代码:

DBHandler.java

public类DBHandler扩展了SQLiteOpenHelper{
私有静态字符串DB_PATH=“/sdcard/movies/”;
私有静态字符串DB_NAME=“audiostore.DB”;
私有SQLiteDatabase-myDataBase;
私有最终上下文myContext;
公共DBHandler(上下文){
super(上下文,DB_名称,null,1);
this.myContext=上下文;
}
public void createDataBase()引发IOException{
布尔值dbExist=checkDataBase();
if(dbExist){
}否则{
这是.getReadableDatabase();
试一试{
copyDataBase();
}捕获(IOE异常){
抛出新错误(“复制数据库时出错”);
}
}
}
私有布尔校验数据库(){
SQLiteDatabase checkDB=null;
试一试{
字符串myPath=DB_PATH+DB_NAME;
checkDB=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READWRITE);
}catch(sqlitee异常){
}
if(checkDB!=null){
checkDB.close();
}
return checkDB!=null?true:false;
}
私有void copyDataBase()引发IOException{
InputStream myInput=myContext.getAssets().open(DB_NAME);
字符串outFileName=DB_路径+DB_名称;
OutputStream myOutput=新文件OutputStream(outFileName);
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=myInput.read(缓冲区))>0){
写入(缓冲区,0,长度);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase()引发SQLException{
字符串myPath=DB_PATH+DB_NAME;
myDataBase=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READWRITE);
}
@凌驾
公共同步作废关闭(){
if(myDataBase!=null)
myDataBase.close();
super.close();
}
@凌驾
public void onCreate(SQLiteDatabase db){
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
公共字符串getData(){
String str=新字符串();
Cursor query=myDataBase.rawQuery(“通过UltimaExecucao ASC从商业订单中选择Arquivo,随机描述限制1”,null);
str=query.getString(query.getColumnIndex(str));
返回str;
}
}
有人可以告诉我为什么它会得到一个空值

====编辑======

下面是日志:

10-0221:19:50.004:E/AndroidRuntime(507):致命异常:主
10-02 21:19:50.004:E/AndroidRuntime(507):java.lang.RuntimeException:无法启动活动组件信息{com.sample.VideoViewExample/com.sample.VideoViewExample.VideoViewExample}:java.lang.NullPointerException
10-02 21:19:50.004:E/AndroidRuntime(507):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
10-0221:19:50.004:E/AndroidRuntime(507):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
10-0221:19:50.004:E/AndroidRuntime(507):在android.app.ActivityThread.access$1500(ActivityThread.java:123)
10-0221:19:50.004:E/AndroidRuntime(507):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
10-0221:19:50.004:E/AndroidRuntime(507):在android.os.Handler.dispatchMessage(Handler.java:99)上
10-0221:19:50.004:E/AndroidRuntime(507):在android.os.Looper.loop(Looper.java:126)上
10-0221:19:50.004:E/AndroidRuntime(507):位于android.app.ActivityThread.main(ActivityThread.java:3997)
10-0221:19:50.004:E/AndroidRuntime(507):位于java.lang.reflect.Method.Invokenactive(本机方法)
10-0221:19:50.004:E/AndroidRuntime(507):位于java.lang.reflect.Method.invoke(Method.java:491)
10-0221:19:50.004:E/AndroidRuntime(507):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-0221:19:50.004:E/AndroidRuntime(507):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-02 21:19:50.004:E/AndroidRuntime(507):在dalvik.system.NativeStart.main(本机方法)
10-0221:19:50.004:E/AndroidRuntime(507):由以下原因引起:java.lang.NullPointerException
10-0221:19:50.004:E/AndroidRuntime(507):位于com.sample.VideoViewExample.DBHandler.getData(DBHandler.java:158)
10-0221:19:50.004:E/AndroidRuntime(507):在com.sample.VideoViewExample.VideoViewExample.onCreate(VideoViewExample.java:21)
10-0221:19:50.004:E/AndroidRuntime(507):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
10-0221:19:50.004:E/AndroidRuntime(507):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
10-0221:19:50.004:E/AndroidRuntime(507):。。。还有11个
其中:

10-0221:19:50.004:E/AndroidRuntime(507):在com.sample.VideoViewExample.VideoViewExample.onCreate(VideoViewExample.java:21)


是方法应返回光标值的另一个类。

您从未调用
openDataBase
方法,因此
myDataBase
对象在执行到达行时为
null
-

Cursor query = myDataBase.rawQuery("SELECT Arquivo FROM Comercial ORDER BY UltimaExecucao ASC , Random DESC LIMIT 1 ", null);

抛出
NullPointerException

您永远不会真正打开数据库。checkDatabase函数打开并关闭它以检查它是否存在,但您从未真正打开它以便使用它

public void createDataBase() throws IOException {
    boolean dbExist = checkDataBase();

    if (dbExist) {
       //****This is where you need to open it*****
       myDataBase = openDataBase();
    } else {
        this.getReadableDatabase();

        try {
            copyDataBase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

请附上logcat stacktrace。