Java Android非静态字符串到静态字符串错误

Java Android非静态字符串到静态字符串错误,java,android,sqlite,static,non-static,Java,Android,Sqlite,Static,Non Static,我正在android中构建一个数据库类,它从getIntent().getStringExtra(name)函数收集字符串非静态数据。 我将这个值放入一个简单的字符串变量(非静态) 当我试图在静态字符串中使用它时,我得到一个错误——“不能对非静态字段进行静态引用” 我怎样才能解决这个问题?这是我的密码: package ent.com; import android.app.Activity; import android.content.Context; import android.dat

我正在android中构建一个数据库类,它从getIntent().getStringExtra(name)函数收集字符串非静态数据。 我将这个值放入一个简单的字符串变量(非静态)

当我试图在静态字符串中使用它时,我得到一个错误——“不能对非静态字段进行静态引用”

我怎样才能解决这个问题?这是我的密码:

package ent.com;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;

public class SetSql extends Activity{

String saveExtra = getIntent().getStringExtra("save");

public static final String KEY_ROWID = "_id";
public static final String KEY_SAVE = "save_name";
public static final String KEY_STADUIM = "stadium_size";
public static final String KEY_FINANCE = "total_money";
public static final String KEY_PLAYERS = "players";

private static String DATABASE_NAME = "save" + saveExtra;
private static final String DATABASE_TABLE = "save_data";
private static final int DATABASE_VERSION = 1;

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

}

}

感谢您的帮助:)

尝试创建一个静态的“getDatabaseName”方法来访问您的字符串。

尝试创建一个静态的“getDatabaseName”方法来访问您的字符串。

加载SetSql类后,您的静态变量
DATABASE_NAME
即被初始化,而实例变量
saveExtra
仅在创建实例时初始化

您可以在SetSql类构造函数中设置
DATABASE\u NAME
值,但要注意,它会影响所有的SetSql实例,而不仅仅是接收到意图的实例


首先,最简单的选择是将
DATABASE\u NAME
设置为实例变量,如
saveExtra
静态变量
DATABASE\u NAME
在加载SetSql类后立即初始化,而实例变量
saveExtra
仅在创建实例时初始化

您可以在SetSql类构造函数中设置
DATABASE\u NAME
值,但要注意,它会影响所有的SetSql实例,而不仅仅是接收到意图的实例


首先,最简单的选择是将
数据库\u NAME
设置为实例变量,如
saveExtra
删除此行
String saveExtra=getIntent()。getStringExtra(“save”);
,并将其写入您的
onCreate()


只需在活动级别声明变量saveExtra。

删除此行
String saveExtra=getIntent().getStringExtra(“save”);
private static String saveExtra =null;
,并将其写入您的
onCreate()

只需在活动级别声明变量saveExtra

private static String saveExtra =null;

用这个

saveExtra = getIntent().getStringExtra("save");

用这个

saveExtra = getIntent().getStringExtra("save");
试试这个

String saveExtra = null; 
private static String DATABASE_NAME = "save" ;
立即创建

String saveExtra = getIntent().getStringExtra("save");
DATABASE_NAME += saveExtra;
试试这个

String saveExtra = null; 
private static String DATABASE_NAME = "save" ;
立即创建

String saveExtra = getIntent().getStringExtra("save");
DATABASE_NAME += saveExtra;

我不确定我是否得到了它。。这两个变量都在DbHelper类之外设置。怎么了?哦,对不起,我误读了,你使用的是内部类。缩进有点错误;)我不确定我是否得到了它。。这两个变量都在DbHelper类之外设置。怎么了?哦,对不起,我误读了,你使用的是内部类。缩进有点错误;)您的意思是不是在activityoncreate方法之外声明它,而在它内部声明saveExtra?它实际上不工作:(Declare-No Problem,…line
getIntent().getStringExtra(“save”);
write-in-onCreate()你的意思是不在Activity-onCreate方法之外声明它,而是在它里面声明saveExtra吗?它实际上不工作:(Declare-No Problem,…line
getIntent().getStringExtra(“save”)
write-in-onCreate()您能解释一下在onCreate内外声明saveExtra变量的原因吗?我们能不能只使用saveExtra的同一个实例(已经在外部声明了)在onCreate方法内部。这是因为类的静态变量将在类中任何其他变量之前初始化。因此,使用其他非静态变量初始化静态变量是不可能的,因为只有在初始化静态变量之后才会初始化非静态变量。请参阅我们的SetSql活动被实例化了不止一次。您能解释一下在onCreate内外声明saveExtra变量的原因吗?难道我们不能只使用同一个saveExtra实例(已经在外部声明了)吗在onCreate方法内部。这是因为类的静态变量将在类中任何其他变量之前初始化。因此,使用其他非静态变量初始化静态变量是不可能的,因为只有在初始化静态变量之后才会初始化非静态变量。请参阅ur SetSql活动被多次实例化。