问题是数据库查询出现了一些问题。我首先检查它是否存在于数据库中。如果它存在,那么我只是在从数据库获取后启动一个 Intent 。如果不存在,则从网络获取并放入数据库
这是我调用数据库函数的地方
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 View 。
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"
}
关于android - Sqlite 数据库查询在获取时出现一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33507996/