当前位置: 首页 > 知识库问答 >
问题:

如何将SharedReferences数据设置为textview?

容俊豪
2023-03-14

我有一个设置活动在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)

共有3个答案

束研
2023-03-14

试着这样做:

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);




  }  
}
郑衡
2023-03-14

只想添加到其他答案中,解释为什么这不起作用——问题是您在getPrefs方法中使用了static关键字。

因为getPrefs是一个静态方法,所以它属于ActivityDuel类,而不是ActivityDuel实例。因此它不能引用您的TextView,因为这是活动实例的一部分。

下面是对java中静态的一个很好的解释

桓智敏
2023-03-14

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

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));

}
 类似资料:
  • 问题内容: 我正在尝试显示媒体存储的多个列,例如艺术家,专辑,标题等。我能够正确获取arraylist中的一个列,并且可以正常工作,但是当我添加另一个列时,所有列都在同一列中数组列表,所以我创建了一个类,并在该类方法中添加了列。但是我无法在custome适配器中声明它,这是我的代码。 活动主体 方法类别 CustomeAdapter 定制XML 如何将方法设置为数组。如何获取任何示例的方法都将有所

  • 问题内容: 我尝试过这种方式,但是它没有改变吗? 问题答案: 最好使用.png文件;.ico是Windows特定的。最好不要使用文件,而是使用类资源(可以包装在应用程序的jar中)。 尽管您甚至可能考虑将setIconImages用于多种尺寸的图标。

  • 我使用的是Spring Kafka 2.2.7,我已经将配置为,并使用消费消息,一切都按预期运行。 我想添加一个来记录所有消耗的消息,但发现很难配置它。留档指出可以在容器上设置RecordInterceptor,但我不确定如何获取容器的实例。 从版本2.2.7开始,您可以向侦听器容器添加RecordInterceptor;它将在调用允许检查或修改记录的侦听器之前被调用。 我查阅了Spring文档,

  • 我目前正在用下面的代码从Google表单中获取所有值,但是在从那里获取所有值之后,现在如何在另一个表单中设置它们呢? var ss=电子表格应用程序。openById(ID); var值=ss。getDataRange()。getValues(); var ss1=电子表格应用程序。openById(ID1); 我没能做到,有没有办法用for循环做到?

  • 问题内容: 我正在尝试将HikariCP与Spring一起用于连接池。我正在使用jdbcTempLate和JdbcdaoSupport。 这是我用于数据源的spring配置文件: 但不幸的是,正在生成以下错误消息: 谁能告诉我如何解决这个问题? 问题答案: 你需要在bean配置上编写此结构(这是你的数据源): 这是我的示例,正​​在运行。你只需要将属性放在hibernate.properties上

  • 我将一个字符串设置为activeElement.value,一切正常。现在,我想为activeElement.value设置一个变量,我得到了以下错误代码: 线程“main”中的异常 org.openqa.selenium.WebDriver异常:未定义患者 ID 命令持续时间或超时:66 毫秒 构建信息:版本:“2.45.0”,修订版:“5017cb8”,时间:“2015-02-26 23:59