Sqllite数据库查询在获取时遇到一些问题
问题描述:
问题是数据库查询出现了一些问题。我首先检查它是否存在于数据库中。如果它存在,那么我从数据库中获取数据后就开始了一个意图。如果它不存在,那么它从网络获取,并把数据库Sqllite数据库查询在获取时遇到一些问题
这就是我所谓的数据库funtion
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
urlBlogtitle = mainBlogPost.get(position).title; // getting title of the clicked item
Log.d(TAG, urlBlogtitle);
summarygetter=databaseChecker(urlBlogtitle);
if(summarygetter=="") new DownloadXmlTaskContent(MainListActivity.this).execute(URL);
else startingIntent(summarygetter);
// intitating the main object for Content parsing
}
这是我databaseChecker方法是
private String databaseChecker(String title) {
DatabaseHandler db = new DatabaseHandler(MainListActivity.this);
String content=" ";
content = db.getContact(title);
Log.d(TAG,content);
return content;
}
这是我的数据库方法
String getContact(String title) {
SQLiteDatabase db = this.getReadableDatabase();
String content = " ";
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_TITLE, KEY_CONTENT }, KEY_ID + "=?",
new String[] { title }, null, null, null, null);
if (cursor != null){
cursor.moveToFirst();}
else
{
return content;
}
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
content=contact.title;
// return contact
return content;
}
这是错误的logcat视图。
11-04 00:56:32.803 2560-2560/com.example.talha.appforblog E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.talha.appforblog, PID: 2560
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at com.example.talha.appforblog.DatabaseHandler.getContact(DatabaseHandler.java:82)
at com.example.talha.appforblog.MainListActivity.databaseChecker(MainListActivity.java:102)
at com.example.talha.appforblog.MainListActivity.onListItemClick(MainListActivity.java:91)
at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
at android.widget.AbsListView$3.run(AbsListView.java:3833)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
答
的问题是,你不检查cursor.moveToFirst()
返回值,如果没有条目,将返回false。取而代之的是:
if (cursor != null){
cursor.moveToFirst();}
else
{
return content;
}
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
content=contact.title;
// return contact
return content;
试试这个:
if (cursor.moveToFirst()){
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
content=contact.title;
// return contact
return content;
} else{
return "Whatever_you_return_when_not_found"
}