Я изменяю свою программу, чтобы получить ее значения из базы данных, и у меня возникают некоторые проблемы, и я немного запутался в том, что делать. Я застрял целыми днями, я был бы признателен за помощь.Android SQlite, Как вы передаете два значения другому виду деятельности?
Когда я выбираю элемент на своем счетчике (заполненный из базы данных), мне нужно его передать значение INT вместе с ним, чтобы я мог отправить его другому действию.
Пока мой код выглядит следующим образом, утилиты базы данных:
общественного класса DbUtility {
static final String DB_NAME="food";
static final String BEEF_TABLE="beef";
static final String CHICKEN_TABLE="chicken";
SQLiteDatabase db=null;
Context context;
public static class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
{
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL("CREATE TABLE IF NOT EXISTS BEEF_TABLE (_id INT PRIMARY KEY,name VARCHAR, cookTime INT);");
db.execSQL("INSERT INTO BEEF_TABLE values(1,'Skirt Steak', 23000);");
db.execSQL("INSERT INTO BEEF_TABLE values(2,'Flank Steak',23000);");
db.execSQL("INSERT INTO BEEF_TABLE values(3,'Filet Mignon',23000);");
db.execSQL("CREATE TABLE IF NOT EXISTS CHICKEN_TABLE (_id INT PRIMARY KEY,name VARCHAR, cookTime INT);");
db.execSQL("INSERT INTO CHICKEN_TABLE values(1,'Breast',20000);");
db.execSQL("INSERT INTO CHICKEN_TABLE values(2,'Wings',10000);");
db.execSQL("INSERT INTO CHICKEN_TABLE values(3,'Burger',30000);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public DbUtility(Context context) {
this.context=context;
}
public SimpleCursorAdapter getBeefAdapter()
{
DatabaseHelper dbhelper=new DatabaseHelper(this.context, DB_NAME, null, 1);
db=dbhelper.getWritableDatabase();
Cursor beefCursor=db.rawQuery("SELECT * FROM BEEF_TABLE", null);
while(!beefCursor.isLast())
beefCursor.moveToNext(); //I don't understand why but it's necessary (alternative call c.getCount())
String[] beefType=new String[1];
int[] to=new int[1];
beefType[0]="name";
to[0]=android.R.id.text1;
SimpleCursorAdapter beefAdapter=new SimpleCursorAdapter(this.context, android.R.layout.simple_spinner_item, beefCursor, beefType, to);
beefAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
db.close();
return beefAdapter;
}
public SimpleCursorAdapter getChickenAdapter()
{
DatabaseHelper dbhelper=new DatabaseHelper(this.context, DB_NAME, null, 1);
db=dbhelper.getWritableDatabase();
Cursor chickenCursor=db.rawQuery("SELECT * FROM CHICKEN_TABLE", null);
while(!chickenCursor.isLast())
chickenCursor.moveToNext(); //I don't understand why but it's necessary (alternative call c.getCount())
String[] chickenType=new String[1];
int[] type=new int[1];
chickenType[0]="name";
type[0]=android.R.id.text1;
SimpleCursorAdapter chickenAdapter=new SimpleCursorAdapter(this.context, android.R.layout.simple_spinner_item, chickenCursor, chickenType, type);
chickenAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
db.close();
return chickenAdapter;
}
public int getCookTime(String theTable, String theFood)
{
DatabaseHelper dbhelper=new DatabaseHelper(this.context, DB_NAME, null, 1);
SQLiteDatabase db=dbhelper.getReadableDatabase();
int TheCookTime = 0;
Cursor foodCursor = db.rawQuery("SELECT * FROM " + theTable + " WHERE name='" + theFood + "'", null);
TheCookTime = foodCursor.getInt(foodCursor.getColumnIndex("cookTime"));
return TheCookTime;
}
мне нужно захватить, cookTime INT и передать его в моей вращателя деятельности:
package com.tsilo.grillbuddy;
импорт android.app.Activity; импорт android.content.Intent; импорт android.os.Bundle; импорт android.view.View; импорт android.widget.Button; импорт android.widget.SimpleCursorAdapter; импорт android.widget.Spinner;
общественный класс ChickenActivity расширяет активность {
int option1value;
int option2value;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner);
final DbUtility db=new DbUtility(this);
SimpleCursorAdapter beefAdapter=db.getBeefAdapter();
final Spinner beefSpinner=(Spinner)this.findViewById(R.id.spinner);
beefSpinner.setAdapter(beefAdapter);
SimpleCursorAdapter chickenAdapter=db.getChickenAdapter();
final Spinner chickenSpinner=(Spinner)this.findViewById(R.id.spinner2);
chickenSpinner.setAdapter(chickenAdapter);
Button TimerButton = (Button)findViewById(R.id.TimerActivityButton);
TimerButton.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
String beefSelection = (String) beefSpinner.getSelectedItem();
option1value = db.getCookTime(DbUtility.BEEF_TABLE, beefSelection);
String chickenSelection = (String) chickenSpinner.getSelectedItem();
option2value = db.getCookTime(DbUtility.CHICKEN_TABLE, chickenSelection);
Intent timer = new Intent (ChickenActivity.this,TimerActivity.class);
timer.putExtra("option1", option1value);
timer.putExtra("option2", option2value);
startActivity(timer);
}
});
}
Редактировать: Как вы можете видеть, что я включил решение, я должен был изменить свои блесны в финале, чтобы они работали и изменить DbUtility к БД. Он отлично компилируется без ошибок, и я в состоянии добраться до моей куриной активности, когда я нажимаю, но теперь я получаю силу близко, когда я нажимаю мою кнопку таймера, мой DDMS выглядит следующим образом
Я пытаюсь понять это. У меня есть int option1value, объявленный в моем классе, вот что я собирался использовать, чтобы передать его putExtra. Я помещал код в свою куриную активность под beefSpinner.setAdapter. Я не уверен, где разместить запрос, можете ли вы подробнее рассказать об этом. Это мое первое приложение для Android и моя первая база данных, встроенная в программу, поэтому я очень слаб по этому поводу. – SickNick 2010-12-08 22:03:22