-2

私はクイズベースのアプリを作成しています。ここ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

私の質問がすべての人に明確であることを願っています。そうでない場合は、お尋ねください。

前もって感謝します。

4

1 に答える 1

0


上に投稿されたログキャット情報に基づいて
、onclickリスナーが設定されているビュー(ボタンなど)にnull参照があると思います。
たとえば、ボタンの手段を使用する場合

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

b が nullの場合、この種の例外が発生します。
それ以外の場合は、次のことを試してください


最初にur db(sqlite)を確認してください。
getText からのカーソルにレコードがない場合。たとえば、db.query()は空のカーソルを返し、 mCursor.moveToFirst()は何らかの例外をスローします。それを チェックします。KEY_id、KEY_ques、KEY_correctansなど の文字
列配列変数をチェックします。nullを追加します以下の記述

if(c==null) return;


行の前のメソッドshowdata()で

if(c.getCount()> 0)


于 2013-09-25T13:16:25.080 に答える