2013-07-08 3 views
0

Я хочу сделать простое приложение-будильник в android. Я использовал ViewPager, Fragment для просмотра и использовал SQLiteDatabase для базы данных.SQL Вставить ошибку базы данных в Android

Вот код:

public class AlarmsActivity_Kronometre extends Fragment { 

Button add; 
SQL sql; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_alarms_kronometre, container, false); 
    sql = new SQL(view.getContext()); 
    add = (Button)view.findViewById(R.id.btn_add); 
    add.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      sql.insertAlarm(1, 25, 11, 1, 1, "Message : 1", "path : 1"); 
      sql.insertAlarm(2, 30, 22, 5, 1, "Message : 2", "path : 2"); 
      sql.insertAlarm(3, 35, 33, 1, 5, "Message : 3", "path : 3"); 
      sql.insertAlarm(4, 40, 44, 4, 1, "Message : 4", "path : 4"); 
      sql.insertAlarm(5, 50, 55, 1, 4, "Message : 5", "path : 5"); 
     } 
    }); 
    return view; 
    } 
} 

SQL Класс:

public class SQL { 
private static final int VERSION = 3; 
private static final String DATABASE_NAME = "alarms.db"; 
private static final String TABLE_ALARMS_ALARM = "Alarm"; 

private static final String COLUMN_ID = "ID"; 
private static final String COLUMN_HOUR = "Hour"; 
private static final String COLUMN_MINUTE = "Minute"; 
private static final String COLUMN_DAYSOFWEEK = "DaysOfWeek"; 
private static final String COLUMN_ENABLED = "Enabled"; 
private static final String COLUMN_VIBRATE = "Vibrate"; 
private static final String COLUMN_MESSAGE = "Message"; 
private static final String COLUMN_PATH = "Path"; 

int index_ID, index_HOUR, index_MINUTE, index_SECOND, index_WEEKDAY; 
int index_ENABLED, index_VIBRATE, index_MESSAGE, index_PATH, index_DAYSOFWEEK; 

private static final String CREATE_DATABASE_ALARMS = "CREATE TABLE " 
     + TABLE_ALARMS_ALARM+ " (" + COLUMN_ID  + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + COLUMN_HOUR  + " INTEGER NOT NULL, " + COLUMN_MINUTE  + " INTEGER NOT NULL, " 
     + COLUMN_DAYSOFWEEK + " INTEGER NOT NULL, " + COLUMN_ENABLED + " INTEGER NOT NULL, " 
     + COLUMN_VIBRATE + " INTEGER NOT NULL, " + COLUMN_MESSAGE + " TEXT NOT NULL, " 
     + COLUMN_PATH  + " TEXT NOT NULL);"; 

private Context context; 
private Cursor c; 
private String[] columns_Alarms = { "id", "Hour", "Minute", "DaysOfWeek", "Enabled", "Vibrate", "Message", "Path"}; 
private SQLiteHelper sqLiteHelper; 
private SQLiteDatabase sqLiteDatabase; 

public SQL(Context c) { 
    context = c; 
} 

public SQL openToRead() throws android.database.SQLException { 
    sqLiteHelper = new SQLiteHelper(context, DATABASE_NAME, null, VERSION); 
    sqLiteDatabase = sqLiteHelper.getReadableDatabase(); 
    return this; 
} 

public SQL openToWrite() throws android.database.SQLException { 
    sqLiteHelper = new SQLiteHelper(context, DATABASE_NAME, null, VERSION); 
    sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
    return this; 
} 

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

public void insertAlarm(int hour, int minute, int daysofweek, int enabled, int vibrate, String message, String path) { 
    ContentValues cv = new ContentValues(); 
    cv.put(COLUMN_HOUR, hour); 
    cv.put(COLUMN_MINUTE, minute); 
    cv.put(COLUMN_DAYSOFWEEK, daysofweek); 
    cv.put(COLUMN_ENABLED, enabled); 
    cv.put(COLUMN_VIBRATE, vibrate); 
    cv.put(COLUMN_MESSAGE, message); 
    cv.put(COLUMN_PATH, path); 
    sqLiteDatabase.insert(TABLE_ALARMS_ALARM, null, cv); 
} 

public void deleteAlarm(int id) { 
    sqLiteDatabase.delete(TABLE_ALARMS_ALARM, " " + COLUMN_ID + " = '" + id + "'", null); 
} 

public int deleteAlarmAll() { 
    return sqLiteDatabase.delete(TABLE_ALARMS_ALARM, null, null); 
} 

protected ArrayList<String> getAlarmsId() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> id = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     id.add(c.getString(index_ID)); 
    } 
    return id; 
} 
protected ArrayList<String> getAlarmsHour() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> hours = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     hours.add(c.getString(index_HOUR)); 
    } 
    return hours; 
} 
protected ArrayList<String> getAlarmsMinute() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> minutes = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     minutes.add(c.getString(index_MINUTE)); 
    } 
    return minutes; 
} 
protected ArrayList<String> getAlarmsDaysOfWeek() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> daysofweek = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     daysofweek.add(c.getString(index_DAYSOFWEEK)); 
    } 
    return daysofweek; 
} 
protected ArrayList<String> getAlarmsEnabled() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> enabled = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     enabled.add(c.getString(index_ENABLED)); 
    } 
    return enabled; 
} 
protected ArrayList<String> getAlarmsVibrate() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> vibrate = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     vibrate.add(c.getString(index_VIBRATE)); 
    } 
    return vibrate; 
} 
protected ArrayList<String> getAlarmsMessage() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> message = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     message.add(c.getString(index_MESSAGE)); 
    } 
    return message; 
} 
protected ArrayList<String> getAlarmsPath() 
{ 
    c = sqLiteDatabase.query(TABLE_ALARMS_ALARM, columns_Alarms, null, null, null, null, null); 
    ArrayList<String> path = null; 

    setIndexColumns(); 
    for (c.moveToFirst(); !(c.isAfterLast()); c.moveToNext()) { 
     path.add(c.getString(index_PATH)); 
    } 
    return path; 
} 

private void setIndexColumns() { 
    index_ID = c.getColumnIndex("ID"); 
    index_HOUR = c.getColumnIndex("Hour"); 
    index_MINUTE = c.getColumnIndex("Minute"); 
    index_DAYSOFWEEK = c.getColumnIndex("DaysOfWeek"); 
    index_ENABLED = c.getColumnIndex("Enabled"); 
    index_VIBRATE = c.getColumnIndex("Vibrate"); 
    index_MESSAGE = c.getColumnIndex("Message"); 
    index_PATH = c.getColumnIndex("Path"); 
} 

protected class SQLiteHelper extends SQLiteOpenHelper { 
    public SQLiteHelper(Context context, String name, CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_DATABASE_ALARMS); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (oldVersion <= newVersion) 
      return; 
     db.execSQL("DROP TABLE IF EXISTS " + CREATE_DATABASE_ALARMS); 
     onCreate(db); 
    } 
} 
} 

Когда я нажимаю кнопку добавления I дает следующее сообщение об ошибке:

07-08 15:13:17.036: I/Process(4004): Sending signal. PID: 4004 SIG: 9 
07-08 15:13:18.704: D/libEGL(4037): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so 
07-08 15:13:18.712: D/libEGL(4037): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so 
07-08 15:13:18.716: D/libEGL(4037): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so 
07-08 15:13:18.786: D/OpenGLRenderer(4037): Enabling debug mode 0 
07-08 15:13:22.696: I/EKLE_ONCLICK(4037): TRUE 
07-08 15:13:22.696: D/AndroidRuntime(4037): Shutting down VM 
07-08 15:13:22.696: W/dalvikvm(4037): threadid=1: thread exiting with uncaught exception (group=0x40c6d930) 
07-08 15:13:22.704: E/AndroidRuntime(4037): FATAL EXCEPTION: main 
07-08 15:13:22.704: E/AndroidRuntime(4037): java.lang.NullPointerException 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at com.kongry.testalarm.SQL.insertAlarm(SQL.java:71) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at com.kongry.testalarm.AlarmsActivity_Kronometre$1.onClick(AlarmsActivity_Kronometre.java:27) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.view.View.performClick(View.java:4211) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.view.View$PerformClick.run(View.java:17362) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.os.Handler.handleCallback(Handler.java:725) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.os.Looper.loop(Looper.java:137) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at android.app.ActivityThread.main(ActivityThread.java:5227) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
07-08 15:13:22.704: E/AndroidRuntime(4037):  at dalvik.system.NativeStart.main(Native Method) 

Что это ошибка? Где моя ошибка?

+1

разместим ваш метод insertAlarm(). –

+0

@ M-WaJeEh просто положил – okarakose

+2

Вы должны вызвать метод openToRead(), прежде чем использовать метод insert, поскольку sqliteDatabase по-прежнему имеет значение null. –

ответ

1

Используйте этот код:

public class AlarmsActivity_Kronometre extends Fragment { 

Button add; 
SQL sql; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.activity_alarms_kronometre, container, false); 
sql = new SQL(view.getContext()); 
**sql.openToWrite();** 
add = (Button)view.findViewById(R.id.btn_add); 
add.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     sql.insertAlarm(1, 25, 11, 1, 1, "Message : 1", "path : 1"); 
     sql.insertAlarm(2, 30, 22, 5, 1, "Message : 2", "path : 2"); 
     sql.insertAlarm(3, 35, 33, 1, 5, "Message : 3", "path : 3"); 
     sql.insertAlarm(4, 40, 44, 4, 1, "Message : 4", "path : 4"); 
     sql.insertAlarm(5, 50, 55, 1, 4, "Message : 5", "path : 5"); 
    } 
    }); 
return view; 
} 
} 
Смежные вопросы