私はずっと前に、sharedPreference androidのストレージメディアと連絡を取っていました。でも、実際に使ったことは一度もない今日、先ほど作った「Civil Model Encyclopedia」アプリを見たとき、このアプリの欠陥を改善するためにsharedPreferenceクラスを使うことができると突然思いました。
以前、私は最初にsharedPreferenceの使用を紹介しました。
Androidデータを保存する方法は4つあります
。SharePreferenceII
、SQLite
III、File
IV、ContentProvider
SharedPreferenceクラスは軽量のストレージクラスであり、ソフトウェア構成パラメータの保存に特に適しています。SharedPreferenceは実際にデータを格納するxmlファイルを生成し、xmlファイルが生成された後の格納場所は "/ data / data / <package name> / shared_prefs"ディレクトリです。
:SharedPreferenceクラス以下の手順を用いて
、まず、クラスSharedPreferenceのオブジェクトインスタンスへのアクセス
編集するエディタを得る二つ、オブジェクト・クラスのインスタンスSharedPreference
データである第三に、エディタが追加使用(変更)
は、4つのトランザクションのコミットするコミット()を使用して
Aを、取得したクラスSharedPreferenceインスタンス
化されたオブジェクトSharedPreferenceクラスによってインスタンス化されたオブジェクトを取得するには2つの方法があります
(1) Context.getSharedPreferences(文字列名、intモード)
パラメータ分析:
a)名前は、SharedPreferenceによって生成されたxmlファイルのファイル名です。 "FirstTest"の場合、SharedPreferenceはコードの実行後にfirstTest.xmlファイルを生成します。このxmlは、パラメーターをキーと値のペアの形式で保存します。
:b)のモードが作成モードが設定SharedPreferenceストレージモード、4つのパラメータの合計である
Context.MODE_PRIVATE:デフォルトの動作モード、ファイルがプライベートデータに代わっている、唯一のローカルアプリケーションアクセスすることができ
Context.MODE_APPEND:ファイルが存在するかどうかを確認し、存在する場合はコンテンツをファイルに追加します。それ以外の場合は、新しいファイルを作成します
。Context.MODE_WORLD_READABLE:現在のファイルは他のアプリケーションで読み取る
ことができます。
(2)
このActivity.getPreferencesのメソッド(intモード) では、名前はgetLocalClassName()によって取得されますが、自分で設定することはできず、最終的にはContextWrapperのgetSharedPreferences()に転送されます。SharedPreference
クラスを取得するには、最初のメソッドを使用することを お勧めしますインスタンス化されたオブジェクト
2、Editorオブジェクトへのアクセス
SharedPreferencesオブジェクト自体はデータを取得できるだけであり、ストレージと変更をサポートしていません。ストレージの変更はEditorオブジェクトを介して行われます。具体的な実装は次のとおりです
SharedPreferences sp = ctx.getSharedPreferences( "Test"、MODE_PRIVATE);
エディターエディター= sp.edit();
3 + 4、エディターを使用してデータを追加(変更)+ commit()を使用してトランザクションを送信します。
エディターには、一般的な変数用の組み込みの書き込み関数(キーと値のペアを使用)があり、データの保存に便利です。データを保存した後、コミットを使用する必要があります()関数はトランザクションを送信してデータストレージを完了します。具体的な実装は次のとおりです。
editor.putString( "STRING_KEY"、 "string"); editor.putInt( "INT_KEY"、0); editor.putBoolean( "BOOLEAN_KEY"、true); editor.commit();
SharedPreferenceクラスを通じて、初めてアプリを入力するときにのみ実行される[ユーザーガイダンス機能]を実装できます。具体的な実装は次のとおりです。
/ ** *このクラスはアプリに入る最初のインターフェイスであり、アプリを 起動するアニメーションを表示します* @author LiXuetao * / public class startAnimationActivity extends Activity { public static final int SKIP_GUIDE = 0x001; public static final int SKIP_MAIN = 0x002; SharedPreferences sharedPreferences ; //このスレッドは、ジャンプアクティビティを遅らせるために使用されます Thread thread; //アプリケーションを初めて開くかどうかを決定します Boolean b; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout。 activity_startanimation); / ** * context.getgetSharedPreferences(文字列名、intモード)sharedPreferenceオブジェクトを取得します * nameは、sharedPreferenceによって生成されたxmlファイルの名前です * / sharedPreferences = getSharedPreferences( "test"、Context.MODE_PRIVATE); スレッド=新しいスレッド(実行可能); thread.start(); } //このハンドラーは、界面を処理するために使用されます(ジャンプ转アクティビティ) ハンドラーハンドラー=新しいHandler(){ public void handleMessage(android.os.Message msg){ switch(msg.what){ case SKIP_GUIDE: Intent guideIntent = new Intent(startAnimationActivity.this、guideActivity.class); startActivity(guideIntent); ブレーク; ケースSKIP_MAIN: Intent mainIntent = new Intent(startAnimationActivity.this、MainActivity.class); startActivity(mainIntent); BREAK; } }; }; のRunnable Runnableを、新たな新= Runnableを(){ @Override ます。public void RUN(){ // TODO自動生成されたメソッドスタブ のtry { // getBoolean(文字列キー、ブールdefvalue)は、キーisFirstの値を取得し、もしこのキーがないと、デフォルト値が取得されます(プログラムを最初に開いたときはisFirstキーは使用できません) b = sharedPreferences.getBoolean( "isFirst"、true); Message msg = handler.obtainMessage(); if(b){ editor.putBoolean( "isFirst"、false); editor.commit(); // sharedpreferenceオブジェクトを変更するためにEditorオブジェクトが使用されます。変更後、トランザクションを送信して変更を完了する必要があります(データベースのトランザクション処理を参照) Editor editor = sharedPreferences.edit(); msg.what = SKIP_GUIDE; } else { msg.what = SKIP_MAIN; } // 3 秒間スリープした後、情報をハンドラーに送信すると、ハンドラーはアクティビティ Thread.sleep(3000);にジャンプします。 handler.sendMessage(msg); } catch(InterruptedException e){ // TODO自動生成されたcatchブロック e.printStackTrace(); } } }; } / ** *このクラスは、アプリのメインインターフェイスです * @author LiXuetao * * / パブリッククラスMainActivityはActivity { @Override protected void onCreate(Bundle savedInstanceState ){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu){ //メニューを膨らませる; これにより、アクションバーが存在する場合、アイテムがアクションバーに追加されます。 getMenuInflater()。inflate(R.menu.main、menu); trueを返します。 } } / ** *该类アプリの最初の导時間、行 * @author LiXuetao * / public class guideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState ); setContentView(R.layout.activity_guide); } }
上記は、アプリが最初に起動したときにガイドインターフェイスに入る特定の実装コードです。
最初に述べたモデルDaquanのAPPの問題は、APPのデータベースが外部からインポートされるため、データベースを変更するたびにデータベースを再インポートする必要があります。そうしないと、データは以前のバージョンのデータベースに従って表示されます。当時はどうしようもなかったので、アプリを開くたびにデータベースが検出されている限り、データベースを削除し、再度インポートする必要がありました。
sharedPreferenceを使用すると、最初にアプリを起動したときにのみ、元のデータベースを削除して新しいデータベースをインポートできます。終了しました。コードを変更します~~~
以前、私は最初にsharedPreferenceの使用を紹介しました。
Androidデータを保存する方法は4つあります
。SharePreferenceII
、SQLite
III、File
IV、ContentProvider
SharedPreferenceクラスは軽量のストレージクラスであり、ソフトウェア構成パラメータの保存に特に適しています。SharedPreferenceは実際にデータを格納するxmlファイルを生成し、xmlファイルが生成された後の格納場所は "/ data / data / <package name> / shared_prefs"ディレクトリです。
:SharedPreferenceクラス以下の手順を用いて
、まず、クラスSharedPreferenceのオブジェクトインスタンスへのアクセス
編集するエディタを得る二つ、オブジェクト・クラスのインスタンスSharedPreference
データである第三に、エディタが追加使用(変更)
は、4つのトランザクションのコミットするコミット()を使用して
Aを、取得したクラスSharedPreferenceインスタンス
化されたオブジェクトSharedPreferenceクラスによってインスタンス化されたオブジェクトを取得するには2つの方法があります
(1) Context.getSharedPreferences(文字列名、intモード)
パラメータ分析:
a)名前は、SharedPreferenceによって生成されたxmlファイルのファイル名です。 "FirstTest"の場合、SharedPreferenceはコードの実行後にfirstTest.xmlファイルを生成します。このxmlは、パラメーターをキーと値のペアの形式で保存します。
:b)のモードが作成モードが設定SharedPreferenceストレージモード、4つのパラメータの合計である
Context.MODE_PRIVATE:デフォルトの動作モード、ファイルがプライベートデータに代わっている、唯一のローカルアプリケーションアクセスすることができ
Context.MODE_APPEND:ファイルが存在するかどうかを確認し、存在する場合はコンテンツをファイルに追加します。それ以外の場合は、新しいファイルを作成します
。Context.MODE_WORLD_READABLE:現在のファイルは他のアプリケーションで読み取る
ことができます。
(2)
このActivity.getPreferencesのメソッド(intモード) では、名前はgetLocalClassName()によって取得されますが、自分で設定することはできず、最終的にはContextWrapperのgetSharedPreferences()に転送されます。SharedPreference
クラスを取得するには、最初のメソッドを使用することを お勧めしますインスタンス化されたオブジェクト
2、Editorオブジェクトへのアクセス
SharedPreferencesオブジェクト自体はデータを取得できるだけであり、ストレージと変更をサポートしていません。ストレージの変更はEditorオブジェクトを介して行われます。具体的な実装は次のとおりです
SharedPreferences sp = ctx.getSharedPreferences( "Test"、MODE_PRIVATE);
エディターエディター= sp.edit();
3 + 4、エディターを使用してデータを追加(変更)+ commit()を使用してトランザクションを送信します。
エディターには、一般的な変数用の組み込みの書き込み関数(キーと値のペアを使用)があり、データの保存に便利です。データを保存した後、コミットを使用する必要があります()関数はトランザクションを送信してデータストレージを完了します。具体的な実装は次のとおりです。
editor.putString( "STRING_KEY"、 "string"); editor.putInt( "INT_KEY"、0); editor.putBoolean( "BOOLEAN_KEY"、true); editor.commit();
SharedPreferenceクラスを通じて、初めてアプリを入力するときにのみ実行される[ユーザーガイダンス機能]を実装できます。具体的な実装は次のとおりです。
/ ** *このクラスはアプリに入る最初のインターフェイスであり、アプリを 起動するアニメーションを表示します* @author LiXuetao * / public class startAnimationActivity extends Activity { public static final int SKIP_GUIDE = 0x001; public static final int SKIP_MAIN = 0x002; SharedPreferences sharedPreferences ; //このスレッドは、ジャンプアクティビティを遅らせるために使用されます Thread thread; //アプリケーションを初めて開くかどうかを決定します Boolean b; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout。 activity_startanimation); / ** * context.getgetSharedPreferences(文字列名、intモード)sharedPreferenceオブジェクトを取得します * nameは、sharedPreferenceによって生成されたxmlファイルの名前です * / sharedPreferences = getSharedPreferences( "test"、Context.MODE_PRIVATE); thread = new Thread( runnable ); thread.start(); } //このハンドラーは、インターフェースの変換を処理するために使用されます(ジャンプアクティビティ) ハンドラーハンドラー=新しいハンドラー(){ public void handleMessage(android.os.Message msg){ switch(msg.what){ case SKIP_GUIDE: Intent guideIntent = new Intent(startAnimationActivity.this、guideActivity.class); startActivity(guideIntent); ブレーク; ケースSKIP_MAIN: =新規新しいmainIntentインテント(startAnimationActivity.this、MainActivity.class)インテント、 startActivity(mainIntent); BREAK; } }; }; のRunnable Runnableを新しい新しい= Runnableを(){ @Override 公共ボイドRUN(){ // TODO自動生成されたメソッドstub try { // getBoolean(String key、boolean defValue)キーの値を取得isFirst、そのようなキーがない場合はデフォルト値を取得(最初のキー isisはプログラムを初めて開いたときに開かない)b = sharedPreferences.getBoolean( "isFirst"、 true); メッセージmsg = handler.obtainMessage(); if(b){ // Editorオブジェクトは、sharedpreferenceオブジェクトの変更に使用されます。変更後、トランザクションを送信して、変更を完了する必要があります(データベースのトランザクション処理を参照) Editor editor = sharedPreferences.edit(); editor.putBoolean( "isFirst"、false); editor.commit (); msg.what = SKIP_GUIDE; } else { msg.what = SKIP_MAIN; } // 3 秒間スリープした後、メッセージをハンドラーに送信すると、ハンドラーがアクティビティ Thread.sleep(3000); handler.sendMessage(msg)にジャンプします; } catch(InterruptedException e){ // TODO自動生成されたcatchブロック e.printStackTrace(); } } }; } / ** *このクラスはアプリのメインインターフェイスです * @author LiXuetao * * / public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout .activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu){ // メニューをインフレートします;これにより、アクションバーが存在する場合、アイテムがアクションバーに追加されます getMenuInflater()。inflate(R.menu.main、menu); return true ; } } / ** *このクラスはアプリのガイドインターフェイスであり、アプリが最初に起動されたときにのみ実行されます * @author LiXuetao * / public class guideActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); } }
上記は、アプリが最初に起動したときにガイドインターフェイスに入る特定の実装コードです。
最初に述べたモデルDaquanのAPPの問題は、APPのデータベースが外部からインポートされるため、データベースを変更するたびにデータベースを再インポートする必要があります。そうしないと、データは以前のバージョンのデータベースに従って表示されます。当時はどうしようもなかったので、アプリを開くたびにデータベースが検出されている限り、データベースを削除し、再度インポートする必要がありました。
sharedPreferenceを使用すると、最初にアプリを起動したときにのみ、元のデータベースを削除して新しいデータベースをインポートできます。終了しました。コードを変更します~~~