2012-04-12 87 views
2

我在android中构建一个数据库类,它从getIntent()。getStringExtra(name)函数收集String非静态数据。 这是我把一个简单的字符串变量(非静态)的值。Android非静态字符串静态字符串错误

当我尝试使用它的静态字符串里,我得到一个错误 - “不能作静态引用非静态字段”。

我该如何解决这个问题?这里是我的代码:

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 
    } 

} 

} 

感谢所有帮助:)

回答

3

试试这个

String saveExtra = null; 
private static String DATABASE_NAME = "save" ; 

在OnCreate中

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

谢谢,它的工作 – arielschon12 2012-04-12 10:06:23

+0

能否请你解释声明saveExtra的原因onCreate内部和外部的变量??我们不能在onCreate方法中使用saveExtra的同一个实例(已经声明为外部) – AndoAiron 2012-04-12 10:40:27

+1

这是因为一个类的静态变量将被初始化之前的任何其他变量所以初始化静态变量和其他非静态变量是不可能的,因为非静态变量只有在初始化静态变量后才会被初始化。请参阅http://www.javatutorialhub.com/wiki/All_about_%22static %22 – user936414 2012-04-12 11:06:42

0

尽量使静态“getDatabaseName”梅索德访问您的字符串。

1

一旦你的SetSql类被加载,你的静态变量DATABASE_NAME被初始化,而实例变量saveExtra仅在创建实例时被初始化。

您可以设置在SetSql类的构造函数DATABASE_NAME值,但要注意,它会影响SetSql的所有的情况下,不只是谁收到的意图之一。

恕我直言,最简单的办法是设置DATABASE_NAMEsaveExtra一个实例变量。

+0

林不知道我明白了..这两个变量都设置在DbHelper类之外。怎么了? – arielschon12 2012-04-12 10:02:29

+0

对不起,我误读了,您正在使用内部类。缩进是有点错误;) – nicopico 2012-04-12 10:07:55

0

拆除活动水平这一行String saveExtra = getIntent().getStringExtra("save"); ,并将其写入到您的onCreate()

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

+0

你的意思是不是在Activity的oncreate方法之外声明它来声明saveExtra里面吗?它不是实际工作:( – arielschon12 2012-04-12 10:04:53

+0

声明 - 没问题,...行'getIntent()getStringExtra(“拯救”)。!'写的onCreate() – MKJParekh 2012-04-12 10:09:45

0
private static String saveExtra =null; 

onCreate 

使用本

saveExtra = getIntent().getStringExtra("save"); 
相关问题