【问题标题】:Android non-static string to Static string errorAndroid非静态字符串到静态字符串错误
【发布时间】:2012-04-12 09:42:40
【问题描述】:

我正在 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
    }

}

}

感谢您的帮助:)

【问题讨论】:

    标签: java android sqlite static non-static


    【解决方案1】:

    试试这个

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

    在 OnCreate 中

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

    【讨论】:

    • 你能解释一下在onCreate内外声明saveExtra变量的原因吗?我们不能在 onCreate 方法中使用相同的 saveExtra 实例(已经在外部声明)。
    • 这是因为类的静态变量将在类中的任何其他变量之前初始化。因此,无法使用其他一些非静态变量来初始化静态变量,因为只有在初始化静态变量后才会初始化非静态变量。参考javatutorialhub.com/wiki/All_about_%22static%22
    • 如果您的 SetSql 活动被多次实例化,可能会出现问题。
    【解决方案2】:

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

    您可以在 SetSql 类构造函数中设置 DATABASE_NAME 值,但请注意它会影响 SetSql 的所有个实例,而不仅仅是收到意图的那个。

    恕我直言,最简单的选择是将DATABASE_NAME 设置为实例变量,例如saveExtra

    【讨论】:

    • 我不确定我明白了。这两个变量都是在 DbHelper 类之外设置的。怎么了?
    • 抱歉,我看错了,您使用的是内部类。缩进有点不对;)
    【解决方案3】:

    尝试使用静态“getDatabaseName”方法来访问您的字符串。

    【讨论】:

      【解决方案4】:
      private static String saveExtra =null;
      

      onCreate
      

      使用这个

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

      【讨论】:

        【解决方案5】:

        从活动级别删除这行String saveExtra = getIntent().getStringExtra("save"); ,并将其写入您的onCreate()

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

        【讨论】:

        • 你的意思是不是在Activity的oncreate方法外面声明而是在里面声明saveExtra?它实际上不起作用:(
        • 声明 - 没问题,...line getIntent().getStringExtra("save"); 写入 onCreate()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-06
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        相关资源
        最近更新 更多