我正在尝试从MainActivity向DatabaseHelper发送一个字符串。它将用作查询的变量。下面的代码来自在线的一些教程。但是,getIntent()和getString()会导致一些错误。还有其他方法可以解决这个问题吗?谢谢。
在我的MainActivity中:
@Override
public void onSerialReceived(String theString) {
Intent sendStuff = new Intent(this, DatabaseHelper.class);
sendStuff.putExtra("key", theString);
startActivity(sendStuff);
DatabaseHelper info = new DatabaseHelper(this);
info.openDatabase();
String data = info.getResChar();
info.closeDatabase();
serialReceivedText.append(data);
}
在DatabaseHelper.java中,它扩展了SQLiteOpenHelper:
@Override
public void onCreate(SQLiteDatabase db) {
Intent extras = getIntent().getExtras();
// Bundle extras = intent.getExtras();
if (extras != null) {
String value = extras.getString("key");
}
}
public String getResChar() {
String CharacterResult = null;
Cursor cursor = mDatabase.rawQuery("SELECT NAME FROM PRODUCT WHERE PRICE = 25", null);
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
do {
CharacterResult = cursor.getString(0);
} while (cursor.moveToNext());
}
cursor.close();
return CharacterResult;
}
答案 0 :(得分:1)
getIntent()是一个Activity方法,因此不能在非Activity类
中使用试试这个,
public class DbHelper extends SQLiteOpenHelper {
private Context context;
public DbHelper(Context context, String name, int version) {
super(context, name, null, version);
// Application Context
this.context = context.getApplicationContext();
}
@Override
public void onCreate(SQLiteDatabase db) {
String res = this.context.getString(String_resId);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
答案 1 :(得分:0)
首先,你不能使用不扩展Activity Super class的类的intent。如果你想传递像string这样的变量,你必须将它传递给它的构造函数。
即 第1步:DatabaseHelper.class
class DatabaseHelper extends SqliteOpenHelper{
String query;
DatabaseHelper(Context context,String query){
this.query = query;
}
第2步:将变量传递给您类中的databasehelper
DatabaseHelper info = new DatabaseHelper(this,"Your Query");
答案 2 :(得分:0)
它无法解析方法getIntent()
,因为它仅适用于Activity类的子类。 (SQLiteOpenHelper不是Activity的子级)
它无法解析方法getString()
,因为当它是属于Bundle对象的方法时,你试图在Intent对象上调用它。
此外,您无法使用:
Intent sendStuff = new Intent(this, DatabaseHelper.class);
sendStuff.putExtra("key", theString);
startActivity(sendStuff);
因为Intent主要用于启动Activity。您的DbHelper类不是活动,因此startActivity(sendStuff)
会引发运行时错误。
发送字符串的最简单方法可能是这样的:
MainActivity中的:替换
Intent sendStuff = new Intent(this, DatabaseHelper.class);
sendStuff.putExtra("key", theString);
startActivity(sendStuff);
DatabaseHelper info = new DatabaseHelper(this);
带
DatabaseHelper info = new DatabaseHelper(this);
info.setString(theString);
DBHelper中的:删除onCreate()
方法,因为它不会被调用。
添加全局字符串变量:private String theString;
并添加一个设置字符串的方法。
public void setString(String str){theString = str;}