在我的应用程序中,我需要根据用户存储在SharedPreference变量中的值声明一个数组。问题在于数组需要在静态块中声明,因为在我的类中调用onCreate()之前需要声明数组的大小。

我的活动中有一个ExpandableList,并将父数组作为接下来7天的日期。

static int plannerSlotCount=7;
static public String[] parent = new String[plannerSlotCount];
static
{

    Calendar cal = Calendar.getInstance();
    String strdate = null;
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

    int i;
    for(i=0;i<plannerSlotCount;i++)
    {

        if (cal != null) {
            strdate = sdf.format(cal.getTime());
            }
            parent[i] = strdate;
            cal.add(Calendar.HOUR_OF_DAY,24);
    }

}


如果我没有在静态块中声明该数组,那么我将收到一条错误消息

public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        TextView textView = getGenericView();
        textView.setText(getGroup(groupPosition).toString());
        return textView;
    }


因此,我必须在静态块本身中声明数组的内容。

问题是我想更改要显示的天数(当前设置为7)。因此,我想到了将数字保存在SharedPreference变量中并对其进行访问以初始化数组。

我面临的问题是

    SharedPreferences preferences = getSharedPreferences(Settings.PREF_SETTINGS_FILE_NAME, MODE_PRIVATE);
    final int slotCounter = preferences.getInt("slotCount", 7);


给我一个错误,说

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper


有什么可能的方法来实现这一目标?

最佳答案

你不能。自从

static {
}


当您第一次上课时,将调用块。因此,我认为在onCreate si调用之前。为了访问SharedPreference,您需要一个context,并且contextonCreate之后是有效的。因此,您无法在静态块中访问SharedPreference

关于java - 类的静态块中的Android getSharedPreferences,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11114684/

10-08 23:44