Android SQlite, как передать два значения в другой вид деятельности? - PullRequest
1 голос
/ 09 декабря 2010

Я модифицирую свою программу, чтобы получить ее значения из базы данных, и у меня возникли некоторые проблемы, и я немного запутался в том, что делать.Я застрял в течение нескольких дней, я был бы признателен за помощь.

Когда я выбираю элемент на моем счетчике (заполняется из базы данных), мне нужно, чтобы он передавал значение 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;
}

Мне нужно захватить, приготовить INT INT и передатьэто к моей деятельности счетчика:

package com.tsilo.grillbuddy;

import android.app.Activity;импорт android.content.Intent;импорт android.os.Bundle;импорт android.view.View;импорт android.widget.Button;import android.widget.SimpleCursorAdapter;import android.widget.Spinner;

открытый класс ChickenActivity extends Activity {

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);
        }
    });

}

Edit : Как видите, я включил решение, мне нужно было изменитьмои спиннеры, чтобы они работали и изменили DbUtility на db.Он прекрасно компилируется без ошибок, и я могу перейти к своей куриной активности, когда нажимаю на нее, но теперь при нажатии кнопки таймера у меня появляется принудительное закрытие, моя DDMS выглядит следующим образом


alt text

1 Ответ

1 голос
/ 09 декабря 2010

РЕДАКТИРОВАТЬ ... ОК, попробуйте это для вашего метода 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;
    }
...