gpt4 book ai didi

Android SQlite,如何将两个值传递给另一个 Activity ?

转载 作者:行者123 更新时间:2023-11-30 04:47:53 24 4
gpt4 key购买 nike

我正在修改我的程序以从数据库中获取它的值,但我遇到了一些问题,我对要做什么感到有点困惑。我已经被困了好几天了,非常感谢您的帮助。

当我在我的微调器上选择一个项目(从数据库填充)时,我需要它传递 INT 值以及它以便我可以将它发送到另一个 Activity 。

到目前为止,我的代码看起来像这样,数据库实用程序:

公共(public)类 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 并将其传递给我的微调器 Activity :

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;

公共(public)类 ChickenActivity 扩展 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);
}
});

}

编辑:如您所见,我合并了解决方案,我需要将微调器更改为 final 以便它们工作并将 DbUtility 更改为 db。它编译得很好,没有错误,当我点击它时我可以进入我的小鸡 Activity ,但现在当我点击我的定时器按钮时我会强制关闭,我的 DDMS 如下所示


alt text

最佳答案

编辑... 好吧,为您的 TimerButton onClick() 方法试试这个。您的 SimpleCursorAdapters 需要声明为“最终”,但您的微调器不再需要声明为“最终”,ChickenActivity 中的 DBUtility 数据库实例也不需要。

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

此外,不要在 DBUtility 类中使​​用 getCookTime() 方法,而是将其添加到 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;
}

关于Android SQlite,如何将两个值传递给另一个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com