Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
JerryLetehen
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 145
#1

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

25.12.2016, 18:10. Просмотров 262. Ответов 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
Всем привет. Появился небольшой вопрос. Допустим я запустил какое-то приложение, оно загрузилось и я его настроил. Весь процесс запуска и...

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

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

Как из одного потока вызвать метод таким образом, чтобы он выполнялся в другом потоке - Программирование Android
Значит имеется некая активность, которая запускает сервер по нажатии кнопки, этот сервер в свою очередь запускает выполнение своей фоновой...

Progress Button, как вызвать метод, а после закончить Progress? - Программирование Android
Есть кнопка с прогрессом, по ее клику вызывается это: private void sendProgress (final LinearProgressButton button){ ...

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

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
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 145
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
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 145
26.12.2016, 12:15  [ТС] #5
Цитата Сообщение от evb Посмотреть сообщение
Изучите вот этот урок и все у вас получится) http://startandroid.ru/ru/uroki/vse-...eferences.html
Полностью аналогичный урок смотрел на Ютубе и по нему делал. У меня проблема в другом. Мне нужно, чтобы при первом запуске(Па аналогии в уроке) отображался "дэфолтный" текст.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
26.12.2016, 12:44 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
5 / 5 / 0
Регистрация: 07.11.2015
Сообщений: 145
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
Привет! Вот еще темы с ответами:

Вызвать метод класса - Программирование Android
получил ссылку на класс по его имени Class <?> cls = null; try { cls = Class.forName(classname); } catch...

Обеспечить редактирование и просмотр файла при последующих запусках программы - Turbo Pascal
Помогите пожайлуста надо сделать так чтобы файл был доступен после завершения программы ( чтение , добавление и т.д.) uses crt; type...

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

Как вызвать метод при старте приложения клиентом - C# MVC
То есть мне нужно запустить метод при первом входе на сайт пользователем получить соответстствующие cookies и работатьть ними. Тоесть чтобы...


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

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

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