如何将数据从 activity 传递到 java class
How to pass data from an activity to a java class
我已经到了下面的墙上。我正在 尝试将变量从我的主 activity 传递到生成我的数据库的 java class 因为 我想在我对该数据库的一个查询中使用此变量来获取结果,然后将其传递给 Main activity。这是我的一段代码:
//MainActivity
public class MainActivity extends AppCompatActivity {
private static RadioGroup selectedAvgStds;
...... //rest of the code///
public void onClickListenerButton(){
selectedAvgStds = (RadioGroup)findViewById(R.id.controlAverageOfLiving);
showResults.setOnClickListener(
int avgStdLiving = selectedAvgStds.getCheckedRadioButtonId();
selectedAvgStdsRb = (RadioButton) findViewById(avgStdLiving);
//variable that I want to pass
String avgStdLivingText = (String) selectedAvgStdsRb.getText();
switch (option) {
case "one":
Intent intent = new Intent(MainActivity.this,DatabaseHelper.class);
Intent.putExtra("values",avgStdLivingText);
startActivity(intent);
break;
}
);
}
我的数据库的一段代码
//DatabaseHelper
public class DatabaseHelper extends SQLiteOpenHelper{
public Cursor showResults(){
SQLiteDatabase db = this.getWritableDatabase();
//the intent does NOT work
Bundle bundle = getIntent().getExtras();
Cursor results = db.rawQuery("select * from "+TEMP_TABLE+"where value = " + selectedAvgStds , null);
return results;
}
}
尽管我已经在 activity 和 class 中导入了所有 Intent 库,但 Intent 没有工作。我怎样才能实现我的目标?为什么 Intents 在这里不起作用?
任何建议和想法将不胜感激。
您无法使用 Intent 获取数据的原因是 SQLiteOpenHelper
class 可能没有 getIntent()
的方法定义。我希望您 使用共享首选项 来存储数据并在您内部检索数据 SQLiteOpenHelper
class.
根据您的评论,您为什么不简单地使 DatabaseHelper
成为一个实例变量并将您的 showResults
方法参数化如下:
public class MyActivity extends Activity {
private DatabaseHelper myDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialise your helper here
myDatabaseHelper = ...
}
public void onClickListenerButton(){
// All your other stuff here...
// variable that I want to pass
String avgStdLivingText = selectedAvgStdsRb.getText().toString();
myDatabaseHelper.showResults(avgStdLivingText);
}
}
然后在助手 class 中,您可以简单地执行以下操作:
public Cursor showResults(String selectedAvgStds){
SQLiteDatabase db = this.getWritableDatabase();
Cursor results = db.rawQuery("select * from "+TEMP_TABLE+"where value = " + selectedAvgStds , null);
return results;
}
}
我已经到了下面的墙上。我正在 尝试将变量从我的主 activity 传递到生成我的数据库的 java class 因为 我想在我对该数据库的一个查询中使用此变量来获取结果,然后将其传递给 Main activity。这是我的一段代码:
//MainActivity
public class MainActivity extends AppCompatActivity {
private static RadioGroup selectedAvgStds;
...... //rest of the code///
public void onClickListenerButton(){
selectedAvgStds = (RadioGroup)findViewById(R.id.controlAverageOfLiving);
showResults.setOnClickListener(
int avgStdLiving = selectedAvgStds.getCheckedRadioButtonId();
selectedAvgStdsRb = (RadioButton) findViewById(avgStdLiving);
//variable that I want to pass
String avgStdLivingText = (String) selectedAvgStdsRb.getText();
switch (option) {
case "one":
Intent intent = new Intent(MainActivity.this,DatabaseHelper.class);
Intent.putExtra("values",avgStdLivingText);
startActivity(intent);
break;
}
);
}
我的数据库的一段代码
//DatabaseHelper
public class DatabaseHelper extends SQLiteOpenHelper{
public Cursor showResults(){
SQLiteDatabase db = this.getWritableDatabase();
//the intent does NOT work
Bundle bundle = getIntent().getExtras();
Cursor results = db.rawQuery("select * from "+TEMP_TABLE+"where value = " + selectedAvgStds , null);
return results;
}
}
尽管我已经在 activity 和 class 中导入了所有 Intent 库,但 Intent 没有工作。我怎样才能实现我的目标?为什么 Intents 在这里不起作用?
任何建议和想法将不胜感激。
您无法使用 Intent 获取数据的原因是 SQLiteOpenHelper
class 可能没有 getIntent()
的方法定义。我希望您 使用共享首选项 来存储数据并在您内部检索数据 SQLiteOpenHelper
class.
根据您的评论,您为什么不简单地使 DatabaseHelper
成为一个实例变量并将您的 showResults
方法参数化如下:
public class MyActivity extends Activity {
private DatabaseHelper myDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialise your helper here
myDatabaseHelper = ...
}
public void onClickListenerButton(){
// All your other stuff here...
// variable that I want to pass
String avgStdLivingText = selectedAvgStdsRb.getText().toString();
myDatabaseHelper.showResults(avgStdLivingText);
}
}
然后在助手 class 中,您可以简单地执行以下操作:
public Cursor showResults(String selectedAvgStds){
SQLiteDatabase db = this.getWritableDatabase();
Cursor results = db.rawQuery("select * from "+TEMP_TABLE+"where value = " + selectedAvgStds , null);
return results;
}
}