29

アプリケーションでコードを一度だけ実行したいのですが、それは初めて実行するときです(新しくインストールされたアプリ)。どうすればこれを行うことができますか、誰でもコードの一部を説明できますか?

実際、私のAndroidプロジェクトでは、データベースを作成し、最初の実行時にのみいくつかの値を挿入したいと考えています. その後、そのコードの特定の部分は再び実行されるべきではありません。SharedPreferencesまたはPreferencesを介してこのメ​​カニズムを実現するにはどうすればよいですか。

サンプルコードがより役に立ちます。

4

4 に答える 4

45

すべての前にSQLiteOpenHelperを使用できます。データベースで物事を行うための好ましい方法です。このクラスには、onCreate(SQLiteDatabase)最初にデータベースを作成するときに呼び出されるメソッドがあります。お似合いだと思います。

より柔軟性が必要で、初めてのロジックがデータベースにのみ関連付けられていない場合は、以前に提供されたサンプルを使用できます。スタートアップスポットに置くだけです。

スタートアップスポットは2か所。アクティビティが 1 つしかない場合は、コードを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();
  }
}

アクティビティ宣言をマニフェストに入れることを忘れないでください。それはインテントフィルター(action = MAIN、category = 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>
于 2013-02-25T07:31:41.363 に答える
15

あなたは試すことができます:

@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();
}

作成の最初のアクティビティでこれを記述します。その後、コードは再度実行されません。

于 2013-02-25T07:04:00.493 に答える
7

これらの状況で私がすることは次のとおりです。

    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 
    }

お役に立てれば

于 2013-02-26T14:23:00.747 に答える
6

アプリでこのコードを実行する必要がある場合は、次のようにします。

  1. firstTime共有設定でブール値がTrueかどうかを確認します
  2. そうでない場合

    • ワンタイムコードを実行する
    • 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();
}
于 2013-02-25T07:04:49.430 に答える