从数据库表中获取数据时出现强制关闭错误

时间:2013-09-25 12:55:51

标签: android sql database sqlite

我正在制作一个基于测验的应用程序,在这里我想根据该表中给出的subectid字段从数据库表中获取问题。

我在Database类中使用了以下代码来获取数据,

public Cursor getText(long subId) throws SQLException 
{
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
            KEY_id, KEY_ques,KEY_correctans,KEY_wrongans1,KEY_wrongans2,KEY_wrongans3,KEY_subject,KEY_subjectid }, 
            KEY_subjectid + "=" + subId, null,null,null, null,null);
    if (mCursor != null) 
    {
        mCursor.moveToFirst();
    }
    return mCursor;

}

以下代码中我使用的是从表中获取数据的类,

public void showdata()
{   
    quesno.setText(Integer.toString(count));
    tvscore.setText(Integer.toString(score));
    db=new DBAdapter(this);
    db.open();
    c=db.getText(subid);          \\Suppose Here subid=1

    if(c.getCount()> 0)
    {
        String ques=c.getString(1);
        tv.setText(ques);
        cans=c.getString(2);
        shuffleArray(ans);
        int[] a = new int[4];
        int j=0;
            for (int i = 0; i < ans.length; i++)
            {
              a[j]=ans[i];
              j++;
            }
         ans1=c.getString(a[0]);
         ans2=c.getString(a[1]);
         ans3=c.getString(a[2]);
         ans4=c.getString(a[3]);
         rb1.setText(ans1);
         rb2.setText(ans2);
         rb3.setText(ans3);
         rb4.setText(ans4);
    }

    count++;
}

当我使用此代码时,我收到Force close错误并且低于Logcat错误

09-25 18:14:33.011: D/AndroidRuntime(521): Shutting down VM
09-25 18:14:33.011: W/dalvikvm(521): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-25 18:14:33.031: E/AndroidRuntime(521): FATAL EXCEPTION: main
09-25 18:14:33.031: E/AndroidRuntime(521): java.lang.NullPointerException
09-25 18:14:33.031: E/AndroidRuntime(521):  at com.example.quizapp.Firstques$2.onClick(Firstques.java:99)
09-25 18:14:33.031: E/AndroidRuntime(521):  at  android.view.View.performClick(View.java:2408)
09-25 18:14:33.031: E/AndroidRuntime(521):  at android.widget.CompoundButton.performClick(CompoundButton.java:99)
09-25 18:14:33.031: E/AndroidRuntime(521):  at   android.view.View$PerformClick.run(View.java:8816)
09-25 18:14:33.031: E/AndroidRuntime(521):  at android.os.Handler.handleCallback(Handler.java:587)
09-25 18:14:33.031: E/AndroidRuntime(521):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-25 18:14:33.031: E/AndroidRuntime(521):  at android.os.Looper.loop(Looper.java:123)
09-25 18:14:33.031: E/AndroidRuntime(521):  at android.app.ActivityThread.main(ActivityThread.java:4627)
09-25 18:14:33.031: E/AndroidRuntime(521):  at java.lang.reflect.Method.invokeNative(Native Method)
09-25 18:14:33.031: E/AndroidRuntime(521):  at java.lang.reflect.Method.invoke(Method.java:521)
09-25 18:14:33.031: E/AndroidRuntime(521):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-25 18:14:33.031: E/AndroidRuntime(521):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-25 18:14:33.031: E/AndroidRuntime(521):  at dalvik.system.NativeStart.main(Native Method)
09-25 18:14:39.672: I/Process(521): Sending signal. PID: 521 SIG: 9

希望我的问题对所有人都清楚,如果不是,请问。

先谢谢。

1 个答案:

答案 0 :(得分:0)

根据你在上面发布的你的logcat信息 我认为在onclick监听器上设置的任何视图(按钮等)都有一个空引用。
例如,如果你使用按钮意味着

Button b;
b.setOnClicklistener(...);

,如果 b为空,则会发生此类异常。
否则请尝试以下


首先检查你的db(sqlite)。
如果游标中没有来自getText的记录。例如 db.query()重新调整空游标,那么 mCursor.moveToFirst()会抛出一些异常检查它
检查ur strng数组变量,例如 KEY_id,KEY_ques,KEY_correctans 等是否为null
添加以下声明

if(c==null) return;

在行

之前的 showdata()方法中
if(c.getCount()> 0)