Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 233
#1

Как вызвать метод только при последующих запусках приложения? - Программирование Android

25.12.2016, 18:10. Просмотров 285. Ответов 6
Метки нет (Все метки)

Доброго времени суток))) В приложении реализую систему сохранения. Нужно, чтобы при первом запуске появлялись "дефолтные" значения, а при следующих запусках эти значения были теми, которые я выставил и сохранил. Метод сохранения реализовать удалось и работает исправно. Однако "дэфолтные" значения у меня не отображаются при первом запуске.
Java
1
2
3
4
5
6
private static String Name_Time = Integer.toString(R.string.text_time);
private static String Name_Volume = Integer.toString(R.string.text_volume);
 
SharedPreferences sharedPreferences;
final String SAVED_TIME = "Saved_Time";
final String SAVED_VOLUME = "Saved_Volume";
по "дэфолту" у меня Name_Time и Name_Volume, которые у меня меняются по кнопке:
Java
1
2
3
4
5
6
public void onClick(DialogInterface dialog, int which) {
                            Name_Time = set_time.getText().toString();
                            Name_Volume = set_volume.getText().toString();
                            Alarm_it();
                            Save_it();
                        }
Здесь же и вызывается метод Save_it() где значения Name_Time и Name_Volume сохраняются:
Java
1
2
3
4
5
6
7
private void Save_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(SAVED_TIME, Name_Time);
        editor.putString(SAVED_VOLUME, Name_Volume);
        editor.apply();
    }
Теперь мне нужно, чтобы при повторном запуске приложения у меня выставлялись значения Name_Time и Name_Volume:
Java
1
2
3
4
5
6
7
8
9
private void Load_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        String Saved_Time = sharedPreferences.getString(SAVED_TIME, "");
        TextView set_time = (TextView)findViewById(R.id.text_time);
        set_time.setText(Saved_Time);
        String Saved_Volume = sharedPreferences.getString(SAVED_VOLUME, "");
        TextView set_volume = (TextView)findViewById(R.id.text_volume);
        set_volume.setText(Saved_Volume);
    }
Однако при первом запуске приложения у меня вместо "дэфолтных" значений - пусто.
Что я делаю не так?
0
Миниатюры
Как вызвать метод только при последующих запусках приложения?  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2016, 18:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как вызвать метод только при последующих запусках приложения? (Программирование Android):

Сохранение состояния приложения с целью экономии времени при последующих запусках
Всем привет. Появился небольшой вопрос. Допустим я запустил какое-то...

Как из своего Android-приложения вызвать другое?
Всем привет. Собственно из названия все понято . Вот у меня есть приложение и...

Клиент bluetooth. как в кнопке правильно вызвать метод для подключения?
нашел в интернете готовый класс private class ConnectThread extends Thread {...

Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке
Значит имеется некая активность, которая запускает сервер по нажатии кнопки,...

Как вызвать метод в активити классе из обычного не активити класса?
Есть активити в котором вводятся логин и пароль. При нажатии кнопки "войти" в...

Progress Button, как вызвать метод, а после закончить Progress?
Есть кнопка с прогрессом, по ее клику вызывается это: private void...

6
evb
1 / 1 / 0
Регистрация: 28.06.2016
Сообщений: 22
25.12.2016, 18:39 #2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MyActivity extends Activity {
 
SharedPreferences prefs = null;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    prefs = getSharedPreferences("com.mycompany.myAppName", MODE_PRIVATE);
}
 
@Override
protected void onResume() {
    super.onResume();
 
    if (prefs.getBoolean("firstrun", true)) {
        // При первом запуске (или если юзер удалял все данные приложения) 
        // мы попадаем сюда. Делаем что-то
//и после действия записывам false в переменную firstrun
//Итого при следующих запусках этот код не вызывается.
        prefs.edit().putBoolean("firstrun", false).commit();
    }
}
}
1
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 233
25.12.2016, 19:51  [ТС] #3
Цитата Сообщение от evb Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MyActivity extends Activity {
 
SharedPreferences prefs = null;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    prefs = getSharedPreferences("com.mycompany.myAppName", MODE_PRIVATE);
}
 
@Override
protected void onResume() {
    super.onResume();
 
    if (prefs.getBoolean("firstrun", true)) {
        // При первом запуске (или если юзер удалял все данные приложения) 
        // мы попадаем сюда. Делаем что-то
//и после действия записывам false в переменную firstrun
//Итого при следующих запусках этот код не вызывается.
        prefs.edit().putBoolean("firstrun", false).commit();
    }
}
}
Моя IDEA выделяет .cummit() и просит .apply() В чём разница?

Добавлено через 1 час 7 минут
evb, Подставил метод Save_it(). То есть, когда я запускаю первый раз приложение(или после удаления пользователем данных), я попадают в onResume(), где я вызываю метод Save_it(), который, по идее, должен записать Name_Time и Name_Volume("дэфолтные" значения). Но, ничего не получается и получаю тот же экран с пустым местом. Возможно, я что-то опять не так делаю)?
0
evb
1 / 1 / 0
Регистрация: 28.06.2016
Сообщений: 22
25.12.2016, 23:48 #4
Изучите вот этот урок и все у вас получится) http://startandroid.ru/ru/uroki/vse-...eferences.html
0
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 233
26.12.2016, 12:15  [ТС] #5
Цитата Сообщение от evb Посмотреть сообщение
Изучите вот этот урок и все у вас получится) http://startandroid.ru/ru/uroki/vse-...eferences.html
Полностью аналогичный урок смотрел на Ютубе и по нему делал. У меня проблема в другом. Мне нужно, чтобы при первом запуске(Па аналогии в уроке) отображался "дэфолтный" текст.
0
Pablito
2644 / 2126 / 725
Регистрация: 12.05.2014
Сообщений: 7,433
Завершенные тесты: 1
26.12.2016, 12:44 #6
Лучший ответ Сообщение было отмечено JerryLetehen как решение

Решение

Java
1
2
3
4
5
6
7
8
9
private void Load_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        String Saved_Time = sharedPreferences.getString(SAVED_TIME, ""); // вместо "" просто вставить дефолтное значение
        TextView set_time = (TextView)findViewById(R.id.text_time);
        set_time.setText(Saved_Time);
        String Saved_Volume = sharedPreferences.getString(SAVED_VOLUME, "");
        TextView set_volume = (TextView)findViewById(R.id.text_volume);
        set_volume.setText(Saved_Volume);
    }
1
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 233
26.12.2016, 20:37  [ТС] #7
Паблито, Вот так Приложение выдаёт ошибку.
Java
1
2
private String Name_Time = getResources().getString(R.string.text_time);
    private String Name_Volume = getResources().getString(R.string.text_volume);
P.S. Тут подсказали, в том случае работает.
Так показывает цифры вместо текста
Java
1
2
private String Name_Time = String.valueOf(R.string.text_time);
    private String Name_Volume = String.valueOf(R.string.text_volume);
Добавлено через 10 минут
Вот так сделал и помогло))
Java
1
2
3
4
5
6
7
8
9
private void Load_it() {
        sharedPreferences = getPreferences(MODE_PRIVATE);
        String Saved_Time = sharedPreferences.getString(SAVED_TIME, getString(Integer.parseInt(Name_Time)));
        TextView set_time = (TextView)findViewById(R.id.text_time);
        set_time.setText(Saved_Time);
        String Saved_Volume = sharedPreferences.getString(SAVED_VOLUME, getString(Integer.parseInt(Name_Volume)));
        TextView set_volume = (TextView)findViewById(R.id.text_volume);
        set_volume.setText(Saved_Volume);
    }
0
26.12.2016, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2016, 20:37
Привет! Вот еще темы с решениями:

Вызвать метод класса
получил ссылку на класс по его имени Class <?> cls = null; try { cls =...

Обеспечить редактирование и просмотр файла при последующих запусках программы
Помогите пожайлуста надо сделать так чтобы файл был доступен после завершения...

Рандом. При втором и последующих запусках программы выдаются те же числа, что и в первый раз
есть небольшая игра: #include <iostream> #include <cmath> using namespace...

Как вызвать метод при старте приложения клиентом
То есть мне нужно запустить метод при первом входе на сайт пользователем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru