DatabaseHelper.java中的getIntent()错误

时间:2016-01-31 04:43:45

标签: android

我正在尝试从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;
}

3 个答案:

答案 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;}