2010-12-08 2 views
1

Я изменяю свою программу, чтобы получить ее значения из базы данных, и у меня возникают некоторые проблемы, и я немного запутался в том, что делать. Я застрял целыми днями, я был бы признателен за помощь.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 выглядит следующим образом


alt text

ответ

1

EDIT ... Хорошо, попробуйте это для метода TimerButton onClick(). Ваш SimpleCursorAdapters должен быть объявлен как «final», но ваши Spinners больше не должны быть ни вашим экземпляром DBUtility db в ChickenActivity.

TimerButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      option1value = getCookTime(beefAdapter); 
      option2value = getCookTime(chickenAdapter); 

      Intent timer = new Intent (ChickenActivity.this, TimerActivity.class); 
      timer.putExtra("option1", option1value); 
      timer.putExtra("option2", option2value); 
      startActivity(timer); 
     } 
    }); 

Кроме того, вместо того, чтобы метод getCookTime() в классе DBUtility, добавьте к этому классу ChickenActivity вместо этого. Я добавил некоторые вызовы android.util.Log, чтобы вы могли протестировать его работу так, как вам нужно.

public int getCookTime(SimpleCursorAdapter adapter) { 
     String theName = "None"; 
     int theCookTime = 0; 

     Cursor theCursor = adapter.getCursor(); 
     theName = theCursor.getString(theCursor.getColumnIndex("name")); 
     theCookTime = theCursor.getInt(theCursor.getColumnIndex("cookTime")); 
     android.util.Log.i("ChickenActivity", "theName: " + theName); 
     android.util.Log.i("ChickenActivity", "theCookTime: " + theCookTime); 
     return theCookTime; 
    } 
+0

Я пытаюсь понять это. У меня есть int option1value, объявленный в моем классе, вот что я собирался использовать, чтобы передать его putExtra. Я помещал код в свою куриную активность под beefSpinner.setAdapter. Я не уверен, где разместить запрос, можете ли вы подробнее рассказать об этом. Это мое первое приложение для Android и моя первая база данных, встроенная в программу, поэтому я очень слаб по этому поводу. – SickNick 2010-12-08 22:03:22

Смежные вопросы