Как я могу установить данные sharedPreferences для просмотра текста? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть активность настройки в 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 ]

2 голосов
/ 21 мая 2019

Просто хочу добавить к другим ответам, чтобы объяснить, почему это не работает - проблема в том, что вы используете ключевое слово static в своем методе getPrefs.

, поскольку getPrefsстатический метод, он принадлежит классу ActivityDuel , но не экземпляру ActivityDuel .Поэтому он не может ссылаться на ваш TextView, потому что это часть экземпляра действия.

Вот хорошее объяснение статики в java

2 голосов
/ 21 мая 2019

Удалить статическое ключевое слово и вернуть сохраненную строку

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

}
0 голосов
/ 21 мая 2019

Предполагая, что у вас есть внутренний класс статического фрагмента внутри действия: вы пытаетесь вызвать функцию 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);



}

}
0 голосов
/ 21 мая 2019

попытайтесь достичь этого так:

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




  }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...