· 7 years ago · Sep 13, 2018, 04:12 PM
1Why is my SQL database failing to store a string?
2@Override
3public void onActivityResult(int requestCode, int resultCode, Intent data) {
4 if (resultCode == RESULT_OK) {
5 if (requestCode == PICK_FROM_FILE) {
6 Uri selectedImageUri = data.getData();
7 selectedImagePath = getPath(selectedImageUri);
8
9 Log.v("IMAGE PATH====>>>> ",selectedImagePath);
10
11 // Save the image path to the database
12 long id = mImageHelper.createImage(selectedImagePath);
13 if (id > 0) {
14 id = mImageRowId;
15 }
16 }
17 }
18}
19
20public class ImageAdapter {
21
22//
23// Database Related Constants
24//
25private static final String DATABASE_NAME = "dataImage";
26private static final String DATABASE_TABLE = "remindersImage";
27private static final int DATABASE_VERSION = 4;
28
29public static final String KEY_IMAGE = "image";
30public static final String KEY_ROWID = "_id";
31
32
33private static final String TAG = "ImageAdapter";
34private DatabaseHelper mImageHelper;
35private SQLiteDatabase mImageDb;
36
37/**
38 * Database creation SQL statement
39 */
40private static final String DATABASE_CREATE =
41 "create table " + DATABASE_TABLE + " ("
42 + KEY_ROWID + " integer primary key autoincrement, "
43 + KEY_IMAGE + " text not null)";
44
45
46
47private final Context mImageCtx;
48
49private static class DatabaseHelper extends SQLiteOpenHelper {
50
51 DatabaseHelper(Context context) {
52 super(context, DATABASE_NAME, null, DATABASE_VERSION);
53 }
54
55 @Override
56 public void onCreate(SQLiteDatabase db) {
57
58 db.execSQL(DATABASE_CREATE);
59 }
60
61 @Override
62 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
63 Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
64 + newVersion + ", which will destroy all old data");
65 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
66 onCreate(db);
67 }
68}
69
70/**
71 * Constructor - takes the context to allow the database to be
72 * opened/created
73 *
74 * @param ctx the Context within which to work
75 */
76public ImageAdapter(Context ctx) {
77 this.mImageCtx = ctx;
78}
79
80/**
81 * Open the database. If it cannot be opened, try to create a new
82 * instance of the database. If it cannot be created, throw an exception to
83 * signal the failure
84 *
85 * @return this (self reference, allowing this to be chained in an
86 * initialization call)
87 * @throws SQLException if the database could be neither opened or created
88 */
89public ImageAdapter open() throws SQLException {
90 mImageHelper = new DatabaseHelper(mImageCtx);
91 mImageDb = mImageHelper.getWritableDatabase();
92 return this;
93}
94
95public void close() {
96 mImageHelper.close();
97}
98
99
100
101public long createImage(String selectedImagePath) {
102 ContentValues cv = new ContentValues();
103 cv.put(KEY_IMAGE, selectedImagePath);
104
105 return mImageDb.insert(DATABASE_TABLE, null, cv);
106}
107
108
109public boolean deleteImage(long rowId) {
110
111 return mImageDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
112}
113
114
115public Cursor fetchAllImages() {
116
117 return mImageDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_IMAGE}, null, null, null, null, null);
118}
119
120
121public Cursor fetchImage(long rowId) throws SQLException {
122
123 Cursor mCursor =
124
125 mImageDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
126 KEY_IMAGE}, KEY_ROWID + "=" + rowId, null,
127 null, null, null, null);
128 if (mCursor != null) {
129 mCursor.moveToFirst();
130 }
131 return mCursor;
132
133}
134
135
136public boolean updateImage(long rowId, String image) {
137 ContentValues args = new ContentValues();
138 args.put(KEY_IMAGE, image);
139
140 return mImageDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
141}
142}
143
14405-31 21:10:14.947: E/AndroidRuntime(533): FATAL EXCEPTION: main
14505-31 21:10:14.947: E/AndroidRuntime(533): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { dat=content://media/external/images/media/22 }} to activity {com.ndroidstudios.android.taskreminder/com.ndroidstudios.android.taskreminder.ReminderEditActivity}: java.lang.NullPointerException
14605-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread.deliverResults(ActivityThread.java:2980)
14705-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
14805-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread.access$1100(ActivityThread.java:123)
14905-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
15005-31 21:10:14.947: E/AndroidRuntime(533): at android.os.Handler.dispatchMessage(Handler.java:99)
15105-31 21:10:14.947: E/AndroidRuntime(533): at android.os.Looper.loop(Looper.java:137)
15205-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread.main(ActivityThread.java:4424)
15305-31 21:10:14.947: E/AndroidRuntime(533): at java.lang.reflect.Method.invokeNative(Native Method)
15405-31 21:10:14.947: E/AndroidRuntime(533): at java.lang.reflect.Method.invoke(Method.java:511)
15505-31 21:10:14.947: E/AndroidRuntime(533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
15605-31 21:10:14.947: E/AndroidRuntime(533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
15705-31 21:10:14.947: E/AndroidRuntime(533): at dalvik.system.NativeStart.main(Native Method)
15805-31 21:10:14.947: E/AndroidRuntime(533): Caused by: java.lang.NullPointerException
15905-31 21:10:14.947: E/AndroidRuntime(533): at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290)
16005-31 21:10:14.947: E/AndroidRuntime(533): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:115)
16105-31 21:10:14.947: E/AndroidRuntime(533): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
16205-31 21:10:14.947: E/AndroidRuntime(533): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
16305-31 21:10:14.947: E/AndroidRuntime(533): at com.ndroidstudios.android.taskreminder.ImageAdapter.createImage(ImageAdapter.java:114)
16405-31 21:10:14.947: E/AndroidRuntime(533): at com.ndroidstudios.android.taskreminder.ReminderEditActivity.onActivityResult(ReminderEditActivity.java:233)
16505-31 21:10:14.947: E/AndroidRuntime(533): at android.app.Activity.dispatchActivityResult(Activity.java:4649)
16605-31 21:10:14.947: E/AndroidRuntime(533): at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
16705-31 21:10:14.947: E/AndroidRuntime(533): ... 11 more
168
169private static final String DATABASE_CREATE =
170"create table " + DATABASE_TABLE + " ("
171 + KEY_ROWID + " integer primary key autoincrement, "
172 + KEY_IMAGE + " text not null)";
173
174private static final String DATABASE_CREATE =
175"create table if not exists " + DATABASE_TABLE + " ("
176 + KEY_ROWID + " integer primary key autoincrement, "
177 + KEY_IMAGE + " text not null)";
178
179Log.v("IMAGE PATH====>>>> ", selectedImagePath);