· 8 years ago · Apr 18, 2018, 12:02 PM
1public class DatabaseProvider extends ContentProvider {
2 ...
3 private DatabaseHelper databaseHelper;
4 private SQLiteDatabase db;
5 ...
6 @Override
7 public boolean onCreate() {
8 databaseHelper = new DatabaseProvider.DatabaseHelper(getContext());
9 return (databaseHelper == null) ? false : true;
10 }
11 ...
12 @Override
13 public Uri insert(Uri uri, ContentValues values) {
14 db = databaseHelper.getWritableDatabase(); // NULL POINTER EXCEPTION HERE
15 ...
16 }
17 private static class DatabaseHelper extends SQLiteOpenHelper {
18 public static final String DATABASE_NAME = "cogsurv.db";
19 public static final int DATABASE_VERSION = 1;
20
21 public static final String[] TABLES = {
22 "people",
23 "travel_logs",
24 "travel_fixes",
25 "landmarks",
26 "landmark_visits",
27 "direction_distance_estimates"
28 };
29
30 // people._id does not AUTOINCREMENT, because it's set based on server's people.id
31 public static final String[] CREATE_TABLE_SQL = {
32 "CREATE TABLE people (_id INTEGER PRIMARY KEY," +
33 "server_id INTEGER," +
34 "name VARCHAR(255)," +
35 "email_address VARCHAR(255))",
36 "CREATE TABLE travel_logs (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
37 "server_id INTEGER," +
38 "person_local_id INTEGER," +
39 "person_server_id INTEGER," +
40 "start DATE," +
41 "stop DATE," +
42 "type VARCHAR(15)," +
43 "uploaded VARCHAR(1))",
44 "CREATE TABLE travel_fixes (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
45 "datetime DATE, " +
46 "latitude DOUBLE, " +
47 "longitude DOUBLE, " +
48 "altitude DOUBLE," +
49 "speed DOUBLE," +
50 "accuracy DOUBLE," +
51 "travel_mode VARCHAR(50), " +
52 "person_local_id INTEGER," +
53 "person_server_id INTEGER," +
54 "travel_log_local_id INTEGER," +
55 "travel_log_server_id INTEGER," +
56 "uploaded VARCHAR(1))",
57 "CREATE TABLE landmarks (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
58 "server_id INTEGER," +
59 "name VARCHAR(150)," +
60 "latitude DOUBLE," +
61 "longitude DOUBLE," +
62 "person_local_id INTEGER," +
63 "person_server_id INTEGER," +
64 "uploaded VARCHAR(1))",
65 "CREATE TABLE landmark_visits (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
66 "server_id INTEGER," +
67 "person_local_id INTEGER," +
68 "person_server_id INTEGER," +
69 "landmark_local_id INTEGER," +
70 "landmark_server_id INTEGER," +
71 "travel_log_local_id INTEGER," +
72 "travel_log_server_id INTEGER," +
73 "datetime DATE," +
74 "number_of_questions_asked INTEGER," +
75 "uploaded VARCHAR(1))",
76 "CREATE TABLE direction_distance_estimates (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
77 "server_id INTEGER," +
78 "person_local_id INTEGER," +
79 "person_server_id INTEGER," +
80 "travel_log_local_id INTEGER," +
81 "travel_log_server_id INTEGER," +
82 "landmark_visit_local_id INTEGER," +
83 "landmark_visit_server_id INTEGER," +
84 "start_landmark_local_id INTEGER," +
85 "start_landmark_server_id INTEGER," +
86 "target_landmark_local_id INTEGER," +
87 "target_landmark_server_id INTEGER," +
88 "datetime DATE," +
89 "direction_estimate DOUBLE," +
90 "distance_estimate DOUBLE," +
91 "uploaded VARCHAR(1))"
92 };
93
94 public DatabaseHelper(Context context) {
95 super(context, DATABASE_NAME, null, DATABASE_VERSION);
96 Log.v(Constants.TAG, "DatabaseHelper()");
97 }
98
99 @Override
100 public void onCreate(SQLiteDatabase db) {
101 Log.v(Constants.TAG, "DatabaseHelper.onCreate() starting");
102
103 // create the tables
104 int length = CREATE_TABLE_SQL.length;
105 for (int i = 0; i < length; i++) {
106 db.execSQL(CREATE_TABLE_SQL[i]);
107 }
108 Log.v(Constants.TAG, "DatabaseHelper.onCreate() finished");
109 }
110
111 @Override
112 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
113 for (String tableName : TABLES) {
114 db.execSQL("DROP TABLE IF EXISTS" + tableName);
115 }
116 onCreate(db);
117 }
118 }
119}
120
121databaseHelper = new DatabaseProvider.DatabaseHelper(getContext());
122
123databaseHelper = new DatabaseProvider.DatabaseHelper(this);