android database: how to properly extracting data from database?
I am working on saving and extracting data to and from database, with the
key being the day selected from the Calendar.
It is a kind of recording weight data for each day. If I have input the
required data to Day A, and then I go on extract data for Day A,
everything is fine.
My question:
If I have NOT input anything for Day A and directly go on extracting data
for Day A, it will crash. How could I modify the codes such that users can
safely getting a Toast saying "User has not input record for this day, no
record found" if no record in DB?
Codes:
protected void onResume()
{
super.onResume();
try
{
new LoadDataTask().execute(record_day_int);
}
catch (SQLiteException e)
{
System.err.println("Exception Message: " + e.getMessage());
}
}
private class LoadDataTask extends AsyncTask<Long, Object, Cursor>
{
DataBaseHelper databaseConnector = new
DataBaseHelper(Calendar_view.this);
@Override
protected Cursor doInBackground(Long... params)
{
databaseConnector.open();
return databaseConnector.getOneRecord(params[0]);
}
@Override
protected void onPostExecute(Cursor result)
{
super.onPostExecute(result);
result.moveToFirst();
int weight_kg01Index = result.getColumnIndex("weight_kg01");
weight_data.setText(""+result.getInt(weight_kg01Index));
result.close();
databaseConnector.close();
}
}
Logcat:
08-28 01:06:16.790: W/dalvikvm(19928): threadid=1: thread exiting with
uncaught exception (group=0x412282a0)
08-28 01:06:16.790: E/AndroidRuntime(19928): FATAL EXCEPTION: main
08-28 01:06:16.790: E/AndroidRuntime(19928):
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with
a size of 0
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
com.abc.abc.Calendar_view$LoadContactTask.onPostExecute(Calendar_view.java:233)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
com.abc.abc.Calendar_view$LoadContactTask.onPostExecute(Calendar_view.java:1)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.os.AsyncTask.finish(AsyncTask.java:631)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.os.AsyncTask.access$600(AsyncTask.java:177)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.os.Looper.loop(Looper.java:137)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
android.app.ActivityThread.main(ActivityThread.java:4898)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
java.lang.reflect.Method.invokeNative(Native Method)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
java.lang.reflect.Method.invoke(Method.java:511)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
08-28 01:06:16.790: E/AndroidRuntime(19928): at
dalvik.system.NativeStart.main(Native Method)
No comments:
Post a Comment