Я хочу запустить часть кода только один раз в своем приложении, и это когда я запускаю его в первый раз (недавно установленное приложение). Как я мог это сделать, может ли кто-нибудь объяснить, давая кусок кода.
На самом деле, в моем проекте Android я хочу создать базу данных и вставить некоторые значения только при первом запуске. После этого этот конкретный фрагмент кода не должен запускаться снова. Как я могу реализовать этот механизм с помощью SharedPreferences или Preferences.
Пример кода будет более полезным.
Ответ 1 · рейтинг 44 · pepyakin
Прежде всего, вы можете использовать SQLiteOpenHelper. Это предпочтительный способ работы с базой данных. Этот класс имеет метод onCreate(SQLiteDatabase), который вызывается при первом создании базы данных. Я думаю, что это хорошо подходит вам.
Если вы хотите большей гибкости и логика вашего первого раза не связана только с базой данных, вы можете использовать образец, предоставленный ранее. Вам просто нужно поместить его в место запуска.
Есть 2 стартовых места. Если у вас есть только одно действие, вы можете поместить свой код в метод onCreate, поэтому он будет таким:
public void onCreate(Bundle savedInstanceState) {
// don't forget to call super method.
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
// <---- run your one time code here
databaseSetup();
// mark first time has ran.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
Не забудьте добавить декларацию активности в манифест, а также его фильтры намерений (действие = MAIN, категория = LAUNCHER).
Если у вас более одного действия и вы не хотите дублировать свою логику запуска, вы можете просто поместить свою логику инициализации в экземпляр приложения, который создается перед всеми действиями (и другими компонентами, такими как службы, широковещательные приемники, поставщики контента) .
Просто создайте такой класс:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
// <---- run your one time code here
databaseSetup();
// mark first time has ran.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
Все, что вам нужно, чтобы это работало, помещается в тег application в атрибуте AndroidManifest.xml android:name=".App".
<!-- other xml stuff -->
<application ... android:name=".App">
<!-- yet another stuff like nextline -->
<activity ... />
</application>
Ответ 2 · рейтинг 15 · Sanober Malik
Вы можете попробовать:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
SharedPreferences.Editor editor = wmbPreference.edit();
if (isFirstRun){
// Code to run once
editor.putBoolean("FIRSTRUN", false);
editor.apply();
}
Напишите это в своем первом действии при создании. Затем после того, как код не будет выполняться снова.
Ответ 3 · рейтинг 7 · Driss Bounouar
вот что я делаю в таких ситуациях:
wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun)
{
// Do your magic here
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
}else{
//what you do everytime goes here
}
надеюсь это поможет
Ответ 4 · рейтинг 6 · Anup Cowkur
Везде, где вам нужно запустить этот код в вашем приложении:
- Проверьте, верно ли логическое значение
firstTime в общих настройках.
Если не
- Run the one time code
- Сохранить
firstTime как true в общих настройках
Что-то вроде этого:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("firstTime", false)) {
// run your one time code here
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}