无法从静态上下文引用非静态方法'getSharedPreferences(java.lang.String,int)'

时间:2015-04-02 16:57:54

标签: java android android-studio android-view android-button

我有一个应用程序,我试图将按钮点击次数限制为五次,然后一旦用户按下此按钮五次就应该禁用。

但是我收到了上述错误,我不确定原因。

有什么想法吗?

          buttonadd.setOnClickListener(new OnClickListener () {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), MainActivity3.class);
            startActivity(intent);

            int clicks = 0;
            clicks++;

            if (clicks >= 5){
                buttonadd.setEnabled(false);
            }

            SharedPreferences prefs = Context.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("clicks", clicks);
            editor.apply();

        }

    });

3 个答案:

答案 0 :(得分:5)

您错误地尝试以静态方式使用虚拟方法getSharedPreferences(),这就是它给出编译时错误的原因。

如果该代码位于Activity,请替换

Context.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);

getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);

如果它在Fragment中,请使用

getActivity().getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);

修改

使用

if (clicks >= 5){
    buttonadd.setEnabled(false);
    buttonadd.setClickable(false);
    buttonadd.setFocusable(false);
    buttonadd.setFocusableInTouchMode(false);
}

并使clicks成为类成员,即将其声明为

private int clicks;
<{1>}中的

编辑2:

我想我已经理解了你犯的错误。在您的代码中,替换

Activity

int clicks = 0;

试试这个。这应该做到。

答案 1 :(得分:2)

这意味着您需要Context对象的实例来调用getSharedPreferences()方法。如果您在Activity内,请尝试以下操作:

this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE)

答案 2 :(得分:0)

正如错误消息所示,getSharedPreferences()是一种非静态方法。当你Context.getSharedPreferences(...)时,你试图直接从课堂上调用它。相反,您需要从Context实例调用它。

如果您的代码位于Activity内(Activity扩展Context),您只需执行以下操作:

SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE);