0

このエラーnullポインタ例外が発生します。
少し背景
私はメインクラスを持っています、予定クラスと予定データクラスを追加します。アポイントメントデータクラスには、データベース(SQLite)が存在しない場合に作成するメソッドがあります。AddAppointmentクラスは、2つのeditTextを使用してビューから値を取得し、ユーザーはいくつかの値を挿入します。このデータは、以前にappointmentDataクラスで作成されたデータベースに値が挿入されるのと同じクラスのメソッドaddEventに渡される必要があります。ただし、予定のDataクラスが呼び出されることはないため、データベースが作成されることはなく、その結果、nullポインター例外が発生します(値をdbに挿入することはできません)。
今私の質問はです。メインクラスでクラスappointmentDataを呼び出して、メソッドonCreateが呼び出され、データベースが作成されるようにするにはどうすればよいですか。
以下のコード
AppointmetDataクラス

 public class AppointmentsData extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "appointments.dba";
    private static final int DATABASE_VERSION = 1;
    private String TIME;
    private String DESCRIPTION;
    private String DETAILS;
    private String DATE;

    //create helper object for events database
    public AppointmentsData(Context ctx){
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 
                + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + TIME + " TEXT NOT NULL," 
                + DATE + " TEXT NOT NULL" 
                + DESCRIPTION + " TEXT NOT NULL"
                + DETAILS + " TEXT NOT NULL");
    }
       }

AddAppointmentクラス

public class AddAppointment extends Activity implements OnClickListener {
    private AppointmentsData events;
    private EditText appDesctription;
    private EditText appDate;
    private EditText appTime;
    private EditText appDetails;
    SQLiteDatabase myDB;
    //Connection conn; //A connection (session) with a specific database
    ResultSet rs; //A table of data representing a database result set, which is usually generated by executing a statement that queries the database.
    PreparedStatement pst; //An ob
    String TableName = "appointments";


    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.appointment_details);

        appDate = (EditText) this.findViewById(R.id.appDate);

        appDate.setKeyListener(null);
        Bundle extras = getIntent().getExtras();
        if(extras !=null) {
            String dateSelected = extras.getString("dateselected");
            appDate.setText(dateSelected);

            View saveAppointment = findViewById(R.id.buttonSave);
            saveAppointment.setOnClickListener(this);

            //SQLiteDatabase db = dbHelper.getWritableDatabase();




        }

    }
    private String DESCRIPTION;
    private String DATE;
    private String TIME;
    private String DETAILS;
    @Override
    public void onClick(View v) {

            appDesctription = (EditText) this.findViewById(R.id.appDescription);
            DESCRIPTION = appDesctription.getText().toString();

            appTime = (EditText) this.findViewById(R.id.appTime);
            TIME = appTime.getText().toString();

            appDetails = (EditText) this.findViewById(R.id.appDetails);
            DETAILS = appDetails.getText().toString();

            DATE = appDate.getText().toString();

            AddAppointment aa = new AddAppointment();
            aa.addEvent(DESCRIPTION);
            aa.addEvent(DATE);
            aa.addEvent(DETAILS);
            aa.addEvent(TIME);

            Intent j = new Intent(this, CalendarViewActivity.class);
            startActivity(j);

    }


            private void addEvent(String string) {
                //insert a new record into Events data source
                //would do something similar for delete and update
                SQLiteDatabase db = events.getWritableDatabase();
                ContentValues values = new ContentValues();
                // add key and value
                values.put(DESCRIPTION, string);
                values.put(DATE, string);
                values.put(TIME, string);
                values.put(DETAILS, string);
                db.insertOrThrow(TABLE_NAME, null, values);
            }
            private String[] FROM = { _ID, TIME, DESCRIPTION, };
            private static String ORDER_BY = _ID + "DESC";
            private Cursor getEvents(){
                //perform managed query. The activity will handle closing
                //and requerying the cursor when needed
                SQLiteDatabase db = events.getReadableDatabase();
                Cursor cursor = db.query(TABLE_NAME, FROM ,null, null, null, null, ORDER_BY);
                startManagingCursor(cursor);
                return cursor;              


    }

enter code here
4

1 に答える 1

0

あなたの問題は、SQLiteOpenHelperサブクラスのメソッドに間違っDMLたステートメントがあることだと思います。onCreate()

ここ:

"CREATE TABLE " + TABLE_NAME + " (" 
                + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + TIME + " TEXT NOT NULL," 
                + DATE + " TEXT NOT NULL" 
                + DESCRIPTION + " TEXT NOT NULL"
                + DETAILS + " TEXT NOT NULL"

日付と説明の列の後ろにコンマがなく、ステートメントの最後に右括弧がありません。これが、データベースが作成されない理由です。それを修正してみてください、そしてそれはうまくいくはずです。

だからここに修正されたステートメントがあります:

"CREATE TABLE " + TABLE_NAME + " (" 
                    + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + TIME + " TEXT NOT NULL," 
                    + DATE + " TEXT NOT NULL," 
                    + DESCRIPTION + " TEXT NOT NULL,"
                    + DETAILS + " TEXT NOT NULL)"
于 2013-03-24T22:28:51.650 に答える