Я работаю над проектом студии Android, в котором я должен получать данные с определенным именем, выбранным из моего списка, данные хранятся в sql в виде таблицы, например, если я щелкаю имя «Майра», он должен получить данные Майры из таблицы базы данных.
вот мой код класса элемента, здесь сообщение - это имя элемента, нажатого в списке в основном действии
`public class Itemshow extends AppCompatActivity {
SQLiteOpenHelper sqLiteOpenHelper;
TextView nameCustomer;
TextView phoneCustomer;
TextView medicinesCustomer;
String message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_itemshow);
Bundle bundle=getIntent().getExtras();
if (bundle!=null)
message=bundle.getString("item");
nameCustomer=(TextView)findViewById(R.id.nameTextView);
nameCustomer.setText(message);
DatabaseHelper db;
db=new DatabaseHelper(this);
Cursor answer = db.getDataForGivenName(message);
while (answer.moveToNext()){
// some examples, you can continue from here
String temp = answer.getString(0); //0 is the index of the column ID
String temp2 = answer.getString(1); //1 is the index of the column CUSTOMER_NAME
// You can possible ad them in Arraylist if you need this data somewhere else
}
}
}
`
и мой вспомогательный класс базы данных
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Chemist.db";
public static final String TABLE_NAME = "chemist_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "CUSTOMER_NAME";
public static final String COL_3 = "CUSTOMER_PHONE";
public static final String COL_4 = "MEDICINES";
public DatabaseHelper( Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+ TABLE_NAME + " (CUSTOMER_NAME TEXT PRIMARY KEY,CUSTOMER_PHONE TEXT,MEDICINES TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertData(String customerName,String phone,String medicines )
{
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put(COL_2,customerName);
contentValues.put(COL_3,phone);
contentValues.put(COL_4,medicines);
long result=db.insert(TABLE_NAME,null,contentValues);
if (result==-1)
return false;
else
return true;
}
public Cursor getAllData(){
SQLiteDatabase db=this.getWritableDatabase();
Cursor res=db.rawQuery("select * from "+TABLE_NAME,null);
return res;
}
public Cursor getDataForGivenName(String name){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor result = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE NAME = '" + name + "'", null);
return result;
}
}
Я не могу это сделать, пожалуйста, помогите мне. я просто хотел показать данные элемента из всех столбцов, выбранных в списке
@pskink PAN есть только одна ошибка, с которой я столкнулся, когда я использую Cursor answer = db.getDataForGivenName(message);, мое приложение вылетает, пожалуйста, не могли бы вы дать мне решение для этого
@pskink Это факт, но я не добавляю одинаковые имена в свою базу данных, тогда почему приложение дает сбой ??
нет, я просто использую theList.getItemAtposition (1) .toString и передаю его с помощью ключа
Вы можете начать с добавления метода для получения всех данных для данного имени, например, "maira"
public Cursor getDataForGivenName(String name){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor result = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE NAME = '" + name + "'", null);
return result;
}
Затем в помощнике вашей базы данных просто добавьте
Cursor answer = sqLiteHelper.getDataForGivenName(message);
И получите все необходимые данные, например:
while (answer.moveToNext()){
// some examples, you can continue from here
String temp = answer.getString(0); //0 is the index of the column ID
String temp2 = answer.getString(1); //1 is the index of the column CUSTOMER_NAME
// You can possible ad them in Arraylist if you need this data somewhere else
}
Обратите внимание, что перед тем, как перейти к этому шагу, вам нужно получить имя (миара) из списка с именами, вы можете сделать это, установив некоторые слушатели onclick.
Cursor answer = sqLiteHelper.getDataForGivenName(message); Эта строка при вводе в itemShow.class приводит к сбою приложения.
Когда я открываю элемент @ Beasteca, мое приложение вылетает без ошибок, я могу показать вам мою ошибку отладчика java.lang.RuntimeException: Unable to start activity ComponentInfo{androidsingh.navjyotsingh.chemisthelper/androidsingh.navjyotsingh.chemisthelper.Itemshow}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor androidsingh.navjyotsingh.chemisthelper.DatabaseHelper.getDataForGivenName(java.lang.String)' on a null object reference
Да, но после сбоя должна быть трассировка стека. Вы можете найти его в разделе «Выполнить» в нижней части экрана.
Вам необходимо инициализировать ваш dbHelper в классе активности.
DatabaseHelper db;, а затем db = new DatabaseHelper(this); в методе onCreate() активности
После добавления этого также мое приложение вылетает, когда я выбираю элемент списка, но когда я удаляю эту строку `Cursor answer = db.getDataForGivenName (message);` приложение работает отлично @Beasteca
почему я не могу получить данные? @Beasteca
сообщение = имя вашего списка?
message = имя элемента, по которому щелкнули в представлении списка (данные которого мы хотим получить) для перекрестной проверки, я использовал текстовое представление, чтобы показать имя, и оно работает отлично.
да, я видел это, нет сообщения - это не имя представления списка, это строковое имя элемента, по которому щелкнули, я снова обновляю код после всех ваших исправлений
вы должны опубликовать свой код основного действия там, где щелкают по списку.