-1

特に専用のJavaクラスでSQLiteデータベースを実行する方法を知っています。しかし、何か、この場合はインテントサービスの中に入れたいときはいつでも、常にエラーが発生し、デバッグできません。

package my.skul;


    import android.app.IntentService;
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;

    public class CheckClassroom extends IntentService {

                /**
                 * A constructor is required, and must call the super IntentService(String)
                 * constructor with a name for the worker thread.
                 */
                public CheckClassroom() {
                    super("CheckClassroom");
                }

                /**
                 * The IntentService calls this method from the default worker thread with
                 * the intent that started the service. When this method returns,
                 * IntentService stops the service, as appropriate.
                 */
                @Override
                protected void onHandleIntent(Intent intent) {





                }
                private DbHelper ourHelper;
                private final Context ourContext;
                private SQLiteDatabase ourDatabase;

                private static class DbHelper extends SQLiteOpenHelper {

                    public DbHelper(Context context) {
                        super(context, "myschool", null, 1);
                        // TODO Auto-generated constructor stub
                    }

                    @Override
                    public void onCreate(SQLiteDatabase arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
                        // TODO Auto-generated method stub

                    }

                    public CheckClassroom(Context c) {
                        ourContext = c;
                    }

                    public CheckClassroom open() {
                        ourHelper = new DbHelper(ourContext);
                        ourDatabase = ourHelper.getWritableDatabase();

                        return this;

                    }

                    public void close() {
                        ourHelper.close();
                    }

            }
                getColumns()
                {
                    //retrieve sqlitedatabase data

                }


    }

私はコンストラクターについてたくさん読んできましたが、完全には理解できません。ここですべてのエラーを説明すると、これをよりよく理解できるようになります。ありがとう..

4

1 に答える 1

2

publicにカーソルを合わせるとC​​heckClassroom(){super( "CheckClassroom"); }空白の最終フィールドourContextが初期化されていない可能性があります

クラスをstaticと宣言したためDbHelper、がインスタンス化されるとすぐにインスタンスが作成されCheckClassroomます。その時点では、ourContextはまだ初期化されていません。

これを修正するには、DbHelperクラスの静的を削除し、代わりに1つのインスタンスを静的フィールドにします。次に、コンストラクターでそれを初期化できます(ourContextを初期化した後)。

private static DbHelper myDbHelper;

public CheckClassroom() {
    super("CheckClassroom");
    ourContext = this;
    myDbHelper = new DbHelper();
}

CheckClassroom.thisそして、ourContextを使用する代わりに、クラスで使用することができますDbHelper

また...

この関数は、クラスpublic CheckClassroom(Context c) { ourContext = c; }内では何の関係もありません。DbHelper

また、開く関数と閉じる関数は正しくないようですが、代わりにonCreateとonDestroyをオーバーライドする必要があると思います

これが修正されたコードです:

package my.skul;

import android.app.IntentService;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class CheckClassroom extends IntentService {

            /**
             * A constructor is required, and must call the super IntentService(String)
             * constructor with a name for the worker thread.
             */
            public CheckClassroom() {
                super("CheckClassroom");
            }

            /**
             * The IntentService calls this method from the default worker thread with
             * the intent that started the service. When this method returns,
             * IntentService stops the service, as appropriate.
             */
            @Override
            protected void onHandleIntent(Intent intent) {





            }
            private DbHelper ourHelper;
            private SQLiteDatabase ourDatabase;

            @Override
            public void onCreate() {
                ourHelper = new DbHelper();
                ourDatabase = ourHelper.getWritableDatabase();
            }

            @Override
            public void onDestroy() {
                ourHelper.close();
            }

            private class DbHelper extends SQLiteOpenHelper {

                public DbHelper() {
                    super(CheckClassroom.this, "myschool", null, 1);
                    // TODO Auto-generated constructor stub
                }

                @Override
                public void onCreate(SQLiteDatabase arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
                    // TODO Auto-generated method stub

                }
            }
            /* not sure what that is... 
            getColumns()
            {
                //retrieve sqlitedatabase data

            }
            */
}
于 2012-10-29T01:00:18.247 に答える