Select 在 ListView 项目上,并显示来自 Android 中另一个 activity 数据库的用户信息
Select on ListView items and show users info from DB another activity in Android
我想在 listview
项目中显示一些用户信息,当点击项目时,将完整的用户信息显示到另一个 activity (例如将数据从数据库传递到其他 activity ).我使用 SQLiteDataBase
来保存用户信息。但是我不知道怎么办?!
例如:当点击用户5时,在其他activity!
中显示用户5的完整信息
注意:请不要让我失望,也不要给我负分。
我在网上搜索但找不到合适的方法 我在我的问题中提出 here.Please 指导我,因为我是业余爱好者。
主页代码:
public class MainPage extends AppCompatActivity {
private ListView listView;
private UserDbHelper userDbHelper;
private SQLiteDatabase sqLiteDatabase;
private Cursor cursor;
private ListDataAdapter listDataAdapter;
private DataProvider dataProvider;
private TextView dataCount_tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
cursor = userDbHelper.getUserInfo(sqLiteDatabase);
listView = (ListView) findViewById(R.id.list);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.list_row_layout);
listView.setAdapter(listDataAdapter);
if (cursor.moveToFirst()) {
do {
String name, family, password, phone, email;
name = cursor.getString(0);
family = cursor.getString(1);
password = cursor.getString(2);
phone = cursor.getString(3);
email = cursor.getString(4);
dataProvider = new DataProvider(name, family, password, phone, email);
listDataAdapter.add(dataProvider);
} while (cursor.moveToNext());
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
/// Code ... ?!!!
}
});
dataCount_tv = (TextView) findViewById(R.id.main_dataCount_text);
dataCount_tv.setText("Count of Data : " + listDataAdapter.getCount());
}
public void search_button(View view){
startActivity(new Intent(getApplicationContext(), SearchPage.class));
}
}
用户页面代码:
public class UserPage extends AppCompatActivity {
private TextView user_name_tv, user_family_tv, user_phone_tv, user_email_tv;
private FloatingActionButton user_delete_btn, user_edit_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_page);
user_name_tv = (TextView) findViewById(R.id.user_info_name);
user_family_tv = (TextView) findViewById(R.id.user_info_family);
user_phone_tv = (TextView) findViewById(R.id.user_phone_text);
user_email_tv = (TextView) findViewById(R.id.user_email_text);
}
}
ListView 适配器代码:
public class ListDataAdapter extends ArrayAdapter {
List list = new ArrayList();
public ListDataAdapter(Context context, int resource) {
super(context, resource);
}
static class LayoutHandler {
TextView NAME, FAMILY, PASSWORD, PHONE, EMAIL;
}
@Override
public void add(Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutHandler layoutHandler;
if (row == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.list_row_layout, parent, false);
layoutHandler = new LayoutHandler();
layoutHandler.NAME = (TextView) row.findViewById(R.id.list_user_name);
layoutHandler.FAMILY = (TextView) row.findViewById(R.id.list_user_family);
layoutHandler.PASSWORD = (TextView) row.findViewById(R.id.list_user_password);
layoutHandler.PHONE = (TextView) row.findViewById(R.id.list_user_phone);
layoutHandler.EMAIL = (TextView) row.findViewById(R.id.list_user_email);
row.setTag(layoutHandler);
} else {
layoutHandler = (LayoutHandler) row.getTag();
}
DataProvider dataProvider = (DataProvider) this.getItem(position);
layoutHandler.NAME.setText(dataProvider.getName());
layoutHandler.FAMILY.setText(dataProvider.getFamily());
layoutHandler.PASSWORD.setText(dataProvider.getPassword());
layoutHandler.PHONE.setText(dataProvider.getPhone());
layoutHandler.EMAIL.setText(dataProvider.getEmail());
return row;
}
}
SQLiteOpenHelper 代码:
public class UserDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "UserInfoDB.db";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_QUERY = "CREATE TABLE " + UserContract.NewUserInfo.TABLE_NAME + "(" +
UserContract.NewUserInfo.USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
UserContract.NewUserInfo.USER_NAME + " TEXT," +
UserContract.NewUserInfo.USER_FAMILY + " TEXT," +
UserContract.NewUserInfo.USER_PASSWORD + " TEXT," +
UserContract.NewUserInfo.USER_PHONE + " TEXT," +
UserContract.NewUserInfo.USER_EMAIL + " TEXT);";
public UserDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.e("DATABASE OPERATION : ", "Database Create / Open...");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.e("DATABASE OPERATION : ", "Table Create...");
}
public void AddUserInfo(String name, String family, String password, String phone, String email, SQLiteDatabase db) {
ContentValues contentValues = new ContentValues();
contentValues.put(UserContract.NewUserInfo.USER_NAME, name);
contentValues.put(UserContract.NewUserInfo.USER_FAMILY, family);
contentValues.put(UserContract.NewUserInfo.USER_PASSWORD, password);
contentValues.put(UserContract.NewUserInfo.USER_PHONE, phone);
contentValues.put(UserContract.NewUserInfo.USER_EMAIL, email);
db.insert(UserContract.NewUserInfo.TABLE_NAME, null, contentValues);
Log.e("DATABASE OPERATION : ", "One row inserted...");
}
public Cursor getUserInfo(SQLiteDatabase db) {
Cursor cursor;
String[] projections = {UserContract.NewUserInfo.USER_NAME, UserContract.NewUserInfo.USER_FAMILY,
UserContract.NewUserInfo.USER_PASSWORD, UserContract.NewUserInfo.USER_PHONE,
UserContract.NewUserInfo.USER_EMAIL};
String list_sort = UserContract.NewUserInfo.USER_ID + " DESC";
cursor = db.query(UserContract.NewUserInfo.TABLE_NAME, projections, null, null, null, null, list_sort);
return cursor;
}
public Cursor getContacts(String user_name, SQLiteDatabase db) {
String[] projections = {UserContract.NewUserInfo.USER_FAMILY, UserContract.NewUserInfo.USER_PASSWORD,
UserContract.NewUserInfo.USER_PHONE, UserContract.NewUserInfo.USER_EMAIL};
String selection = UserContract.NewUserInfo.USER_NAME + " LIKE ?";
String[] selection_args = {user_name};
Cursor cursor = db.query(UserContract.NewUserInfo.TABLE_NAME, projections, selection, selection_args, null, null, null);
return cursor;
}
public Boolean login(String username, String password, SQLiteDatabase db) throws SQLException {
Cursor cursor = db.rawQuery("SELECT * FROM " + UserContract.NewUserInfo.TABLE_NAME +
" WHERE " + UserContract.NewUserInfo.USER_NAME + "=? AND " +
UserContract.NewUserInfo.USER_PASSWORD + "=?", new String[]{username, password});
if (cursor != null) {
if (cursor.getCount() > 0) {
return true;
}
}
return false;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
DataProvider class 代码:
public class DataProvider {
private String name, family, password, phone, email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public DataProvider(String name, String family, String password, String phone, String email) {
this.name = name;
this.family = family;
this.password = password;
this.phone = phone;
this.email = email;
}
}
请帮助我,因为我需要这个教程。感谢所有亲爱的 <3
你的数据提供者对象class
public class DataProvider implements Serializable {
private String name, family, password, phone, email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public DataProvider(String name, String family, String password, String phone, String email) {
this.name = name;
this.family = family;
this.password = password;
this.phone = phone;
this.email = email;
}
}
和 onItemclick 方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
DataProvider dataprovider = (DataProvider)listDataadapter.getItem(position);
Bundle bundle = new Bundle();
bundle.putSerializable("anyname",dataprovider);
Intent intent = new Intent(MainPage.this,yoursecondactivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
第二个 activity 您需要使用
获取此参数
getIntent().getExtras();
并检查它是否为空,如果不为空则将其存储在数据提供者对象中
基本上,您需要将用户信息从 ListActivity 传递到 ProfileACtivity。有两种方法可以实现:
- 使用 Parceable 模型
创建可分割模型。让我们称之为用户模型。 Android Studio 帮助制作 class Parceable。您只需要让 UserModel 实现 Parceable 接口。
(什么是 Parceable 接口 -> 它有助于将对象从一个组件传递到另一个组件。您可以在线找到更多信息)
现在使用以下代码在 Intent 中传递它
intent.putExtra("user", myUserModel);
在您的个人资料中 activity 您可以使用以下方法获取此对象:
UserModel userModel = getIntent().getExtra("user");
//Now populate your views using the model you just obtained from the intent
将 id 传递给 activity 并从 ProfileACtivity 中的数据库获取完整的 UserModel:
intent.putExtra("id", id);
个人资料活动:
int id = getIntent().getExtra("id");
UserModel userModel = mMySQLiteHelper.getUserData(id);
//Populate your views using this model.
请注意,我还没有检查您的代码。但我认为您可以轻松地在代码中采用这些方法中的任何一种来实现相同的目的。
如果您需要更多帮助,请告诉我。
我想在 listview
项目中显示一些用户信息,当点击项目时,将完整的用户信息显示到另一个 activity (例如将数据从数据库传递到其他 activity ).我使用 SQLiteDataBase
来保存用户信息。但是我不知道怎么办?!
例如:当点击用户5时,在其他activity!
注意:请不要让我失望,也不要给我负分。
我在网上搜索但找不到合适的方法 我在我的问题中提出 here.Please 指导我,因为我是业余爱好者。
主页代码:
public class MainPage extends AppCompatActivity {
private ListView listView;
private UserDbHelper userDbHelper;
private SQLiteDatabase sqLiteDatabase;
private Cursor cursor;
private ListDataAdapter listDataAdapter;
private DataProvider dataProvider;
private TextView dataCount_tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
cursor = userDbHelper.getUserInfo(sqLiteDatabase);
listView = (ListView) findViewById(R.id.list);
listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.list_row_layout);
listView.setAdapter(listDataAdapter);
if (cursor.moveToFirst()) {
do {
String name, family, password, phone, email;
name = cursor.getString(0);
family = cursor.getString(1);
password = cursor.getString(2);
phone = cursor.getString(3);
email = cursor.getString(4);
dataProvider = new DataProvider(name, family, password, phone, email);
listDataAdapter.add(dataProvider);
} while (cursor.moveToNext());
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
/// Code ... ?!!!
}
});
dataCount_tv = (TextView) findViewById(R.id.main_dataCount_text);
dataCount_tv.setText("Count of Data : " + listDataAdapter.getCount());
}
public void search_button(View view){
startActivity(new Intent(getApplicationContext(), SearchPage.class));
}
}
用户页面代码:
public class UserPage extends AppCompatActivity {
private TextView user_name_tv, user_family_tv, user_phone_tv, user_email_tv;
private FloatingActionButton user_delete_btn, user_edit_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_page);
user_name_tv = (TextView) findViewById(R.id.user_info_name);
user_family_tv = (TextView) findViewById(R.id.user_info_family);
user_phone_tv = (TextView) findViewById(R.id.user_phone_text);
user_email_tv = (TextView) findViewById(R.id.user_email_text);
}
}
ListView 适配器代码:
public class ListDataAdapter extends ArrayAdapter {
List list = new ArrayList();
public ListDataAdapter(Context context, int resource) {
super(context, resource);
}
static class LayoutHandler {
TextView NAME, FAMILY, PASSWORD, PHONE, EMAIL;
}
@Override
public void add(Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutHandler layoutHandler;
if (row == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.list_row_layout, parent, false);
layoutHandler = new LayoutHandler();
layoutHandler.NAME = (TextView) row.findViewById(R.id.list_user_name);
layoutHandler.FAMILY = (TextView) row.findViewById(R.id.list_user_family);
layoutHandler.PASSWORD = (TextView) row.findViewById(R.id.list_user_password);
layoutHandler.PHONE = (TextView) row.findViewById(R.id.list_user_phone);
layoutHandler.EMAIL = (TextView) row.findViewById(R.id.list_user_email);
row.setTag(layoutHandler);
} else {
layoutHandler = (LayoutHandler) row.getTag();
}
DataProvider dataProvider = (DataProvider) this.getItem(position);
layoutHandler.NAME.setText(dataProvider.getName());
layoutHandler.FAMILY.setText(dataProvider.getFamily());
layoutHandler.PASSWORD.setText(dataProvider.getPassword());
layoutHandler.PHONE.setText(dataProvider.getPhone());
layoutHandler.EMAIL.setText(dataProvider.getEmail());
return row;
}
}
SQLiteOpenHelper 代码:
public class UserDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "UserInfoDB.db";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_QUERY = "CREATE TABLE " + UserContract.NewUserInfo.TABLE_NAME + "(" +
UserContract.NewUserInfo.USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
UserContract.NewUserInfo.USER_NAME + " TEXT," +
UserContract.NewUserInfo.USER_FAMILY + " TEXT," +
UserContract.NewUserInfo.USER_PASSWORD + " TEXT," +
UserContract.NewUserInfo.USER_PHONE + " TEXT," +
UserContract.NewUserInfo.USER_EMAIL + " TEXT);";
public UserDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
Log.e("DATABASE OPERATION : ", "Database Create / Open...");
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_QUERY);
Log.e("DATABASE OPERATION : ", "Table Create...");
}
public void AddUserInfo(String name, String family, String password, String phone, String email, SQLiteDatabase db) {
ContentValues contentValues = new ContentValues();
contentValues.put(UserContract.NewUserInfo.USER_NAME, name);
contentValues.put(UserContract.NewUserInfo.USER_FAMILY, family);
contentValues.put(UserContract.NewUserInfo.USER_PASSWORD, password);
contentValues.put(UserContract.NewUserInfo.USER_PHONE, phone);
contentValues.put(UserContract.NewUserInfo.USER_EMAIL, email);
db.insert(UserContract.NewUserInfo.TABLE_NAME, null, contentValues);
Log.e("DATABASE OPERATION : ", "One row inserted...");
}
public Cursor getUserInfo(SQLiteDatabase db) {
Cursor cursor;
String[] projections = {UserContract.NewUserInfo.USER_NAME, UserContract.NewUserInfo.USER_FAMILY,
UserContract.NewUserInfo.USER_PASSWORD, UserContract.NewUserInfo.USER_PHONE,
UserContract.NewUserInfo.USER_EMAIL};
String list_sort = UserContract.NewUserInfo.USER_ID + " DESC";
cursor = db.query(UserContract.NewUserInfo.TABLE_NAME, projections, null, null, null, null, list_sort);
return cursor;
}
public Cursor getContacts(String user_name, SQLiteDatabase db) {
String[] projections = {UserContract.NewUserInfo.USER_FAMILY, UserContract.NewUserInfo.USER_PASSWORD,
UserContract.NewUserInfo.USER_PHONE, UserContract.NewUserInfo.USER_EMAIL};
String selection = UserContract.NewUserInfo.USER_NAME + " LIKE ?";
String[] selection_args = {user_name};
Cursor cursor = db.query(UserContract.NewUserInfo.TABLE_NAME, projections, selection, selection_args, null, null, null);
return cursor;
}
public Boolean login(String username, String password, SQLiteDatabase db) throws SQLException {
Cursor cursor = db.rawQuery("SELECT * FROM " + UserContract.NewUserInfo.TABLE_NAME +
" WHERE " + UserContract.NewUserInfo.USER_NAME + "=? AND " +
UserContract.NewUserInfo.USER_PASSWORD + "=?", new String[]{username, password});
if (cursor != null) {
if (cursor.getCount() > 0) {
return true;
}
}
return false;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
DataProvider class 代码:
public class DataProvider {
private String name, family, password, phone, email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public DataProvider(String name, String family, String password, String phone, String email) {
this.name = name;
this.family = family;
this.password = password;
this.phone = phone;
this.email = email;
}
}
请帮助我,因为我需要这个教程。感谢所有亲爱的 <3
你的数据提供者对象class
public class DataProvider implements Serializable {
private String name, family, password, phone, email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFamily() {
return family;
}
public void setFamily(String family) {
this.family = family;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public DataProvider(String name, String family, String password, String phone, String email) {
this.name = name;
this.family = family;
this.password = password;
this.phone = phone;
this.email = email;
}
}
和 onItemclick 方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
DataProvider dataprovider = (DataProvider)listDataadapter.getItem(position);
Bundle bundle = new Bundle();
bundle.putSerializable("anyname",dataprovider);
Intent intent = new Intent(MainPage.this,yoursecondactivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
第二个 activity 您需要使用
获取此参数getIntent().getExtras();
并检查它是否为空,如果不为空则将其存储在数据提供者对象中
基本上,您需要将用户信息从 ListActivity 传递到 ProfileACtivity。有两种方法可以实现:
- 使用 Parceable 模型
创建可分割模型。让我们称之为用户模型。 Android Studio 帮助制作 class Parceable。您只需要让 UserModel 实现 Parceable 接口。 (什么是 Parceable 接口 -> 它有助于将对象从一个组件传递到另一个组件。您可以在线找到更多信息)
现在使用以下代码在 Intent 中传递它
intent.putExtra("user", myUserModel);
在您的个人资料中 activity 您可以使用以下方法获取此对象:
UserModel userModel = getIntent().getExtra("user");
//Now populate your views using the model you just obtained from the intent
将 id 传递给 activity 并从 ProfileACtivity 中的数据库获取完整的 UserModel:
intent.putExtra("id", id);
个人资料活动:
int id = getIntent().getExtra("id");
UserModel userModel = mMySQLiteHelper.getUserData(id);
//Populate your views using this model.
请注意,我还没有检查您的代码。但我认为您可以轻松地在代码中采用这些方法中的任何一种来实现相同的目的。
如果您需要更多帮助,请告诉我。