如何将sharedPreferences数据设置为textview?

时间:2019-05-21 19:04:54

标签: java android sharedpreferences

我在android studio中进行设置活动,用户将在文本框中输入名称。他们将单击“保存”并转到另一个活动,其名称将显示在文本视图中。我在尝试显示在文本视图中的名称时遇到了麻烦,我尝试了一些不同的操作,并且遇到了一些不同的错误,这很可能是我没有得到或忽略的事情。这是我的错误+代码

public class ActivityDuel extends AppCompatActivity {


public static String getPrefs(String n, Context context) {
    final TextView txtD1 = (TextView) getView().findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
    txtD1.setText(n);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



}

}

我的错误是:

error: non-static method <T>findViewById(int) cannot be referenced from a static context
where T is a type-variable:
T extends View declared in method <T>findViewById(int)

4 个答案:

答案 0 :(得分:2)

删除静态关键字并返回您保存的字符串

public String getPrefs(String n, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
}

在您的OnCreate上

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    final TextView txtD1 = (TextView) findViewById(R.id.txtD1);
    txtD1.setText(getPrefs("your_key", this));

}

答案 1 :(得分:2)

只想添加其他答案以解释为什么这行不通-问题是您在static方法上使用了getPrefs关键字。

由于getPrefs是静态方法,因此它属于ActivityDuel ,但不属于ActivityDuel 实例。因此它无法引用您的TextView,因为这是活动实例的一部分。

Here's a good explanation of statics in java

答案 2 :(得分:0)

尝试通过这种方式实现:

public class ActivityDuel extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    TextView txtD1 = (TextView) findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    String string = preferences.getString(n, "name");
    setSupportActionBar(toolbar);

    txtD1.setText(string);




  }  
}

答案 3 :(得分:0)

  

假设您在活动中有一个静态片段内部类:您正在尝试调用该活动的findViewById(),而在没有内部引用的静态内部类中您将无法调用它。

在onCreateView()中,您需要在刚膨胀的根视图上调用它。

您可以尝试一下。

public class ActivityDuel extends AppCompatActivity {


public String getPrefs(String n, Context context) {
    final  TextView txtD1 = (TextView) rootView.findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
    txtD1.setText(n);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



}

}