現在我嘗試從數據庫[SQLite的]查詢數據通過搜索 其未來我想按下列表視圖是搜索後發現,但這個錯誤顯示如何按下列表視圖來顯示信息來源//安卓
android.database.CursorIndexOutOfBoundsException:索引2請求,尺寸爲2 在android.database.AbstractCursor.checkPosition(AbstractCursor.java:460) 在android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 在android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) at th.kusrc.devbeginner.sqlite4.SearchActivity $ 1.onItemClick(SearchActivity.java:50) at android.widget.AdapterView.performItemClick(AdapterView.java:310) at android.widget.AbsListView.performItemClick(AbsListView.java :1145) at android.widget.AbsListView $ PerformClick.run(AbsListView.java:3066) at android.widget.AbsListView $ 3.run(AbsListView.java:3903) at android.os.Handler.handleCallback(Handler。 java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread。 main(ActivityThread.java:5451) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android .internal.os.ZygoteInit.main(ZygoteInit.java:616)
在SearchActivity在userDbHelper
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Search_name = (EditText) findViewById(R.id.search_name);
listView = (ListView) findViewById(R.id.listView);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout);
listView.setAdapter(listDataAdapter);
// OnClick Item
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView, int position, long mylng) {
String user_name = cursor.getString(cursor.getColumnIndex("USER_NAME"));
Toast.makeText(getApplicationContext(),
"Selected User : " + user_name, Toast.LENGTH_SHORT).show();
}
});
searchBtn = (Button) findViewById(R.id.searchContact);
searchBtn.setOnClickListener(this);
}
public void searchContact() {
search_name = Search_name.getText().toString();
userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
cursor = userDbHelper.getContact(search_name, sqLiteDatabase);
if(cursor.moveToFirst()) {
do {
String name, mobile, email;
name = cursor.getString(0);
mobile = cursor.getString(1);
email = cursor.getString(2);
DataProvider dataProvider = new DataProvider(name, mobile, email);
listDataAdapter.add(dataProvider);
}
while (cursor.moveToNext());
}
}
public class UserDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "USERINFO.DB";
private static final int DATABASE_VERSION = 4;
private static final String CREATE_QUERY =
"CREATE TABLE " + UserContact.NewUserInfo.TABLE_NAME + "(" + UserContact.NewUserInfo.USER_NAME + " TEXT," +
UserContact.NewUserInfo.USER_MOB + " TEXT," + UserContact.NewUserInfo.USER_EMAIL + " TEXT" + ");";
public UserDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.d("Database Operation", "Database created......");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.d("Database Operation", "Table created......");
}
public Cursor getContact(String user_name, SQLiteDatabase db) {
String[] projections = {UserContact.NewUserInfo.USER_NAME, UserContact.NewUserInfo.USER_MOB, UserContact.NewUserInfo.USER_EMAIL};
String selection = UserContact.NewUserInfo.USER_NAME + " LIKE ?";
String[] selection_args = {user_name};
Cursor cursor = db.query(UserContact.NewUserInfo.TABLE_NAME, projections, selection, selection_args, null, null, null);
return cursor;
}
和UserContact.NewUserInfo
public class UserContact {
public static abstract class NewUserInfo {
public static final String USER_NAME = "user_name";
public static final String USER_MOB = "user_mob";
public static final String USER_EMAIL = "user_email";
public static final String TABLE_NAME = "user_info";
}
}
我怎樣才能解決這個問題?
編輯:更新userDbHelper
如何創建新的數據庫語句? 請給我一個CREATE語句 – redAllocator
好的,我更新了userDbHelper。 – MyNaMeArT