私は現在、私は有名な人々からの引用符を表示するAndroidアプリを構築しています。私は、ホーム画面と私はお気に入りの引用符を表示するすべての引用符とその他を表示しています2つの他の画面を、持っています。
私はAllQuotesActivityの画面のようにボタンを押したときに、私のFavouriteQuotes活動データを得ることができますのでので、引用と著者は、SharedPreferencesに保存されますLinkedHashSetの、に保存されます。私は、データを取得することができますが、データは他のリンクはLinkedHashSetのは、挿入順序を維持することを言うにもかかわらず、混合されます。たぶん私は何か間違ったことをしました。ここで重要なコードスニペットは、次のとおりです。
AllQuotesActivity.java:
SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.all_quotes);
Resources res = getResources();
Context context = getApplicationContext();
this.sharedPref = context.getSharedPreferences(
"MyPref", Context.MODE_PRIVATE);
final String[] quotesAndAuthors = res.getStringArray(R.array.quotes);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
set.add(quotesAndAuthors[counter]);
set.add(quotesAndAuthors[counter + 1]);
}
});
}
@Override
public void onPause() {
super.onPause();
Log.d("RichQuotes", "Its paused mkay");
Editor editor = sharedPref.edit();
editor.putStringSet("quotesAndAuthors", this.set);
editor.commit();
}
}
FavouriteQuotesActivity.java:
SharedPreferences sharedPref;
Set<String> set = new LinkedHashSet();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favourite_quotes);
Resources res = getResources();
Context context = getApplicationContext();
this.sharedPref = context.getSharedPreferences(
"MyPref", Context.MODE_PRIVATE);
set = sharedPref.getStringSet("quotesAndAuthors", null);
for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
String s = it.next();
Log.v("test", s);
}
私は、不要なコードを削除しました。
FavouriteQuotesActivity.javaで、私はその値をチェックするように設定をログに記録しています。画面上のログ出力と出力が同じであり、両方とも同じようにソートされていません。
セットセット=新しいLinkedHashSetの();
この行では、新しい空のインスタンスLinkedHashSet
オブジェクトを。このオブジェクトは、という名前の変数に割り当てられましたset
。
セット= sharedPref.getStringSet( "quotesAndAuthors"、NULL);
この行では、あなたが再割り当てset
いくつかの他のオブジェクトを指すように変数を、いくつかのSet
オブジェクトは、あなたの呼び出しによって返されましたgetStringSet
。我々は実装されていることを、この第二の目的の具体的なクラスを知らないSet
インタフェースを。あなたは呼び出すことで求めることができますgetClass
。
あなたの最初のセット、空にはLinkedHashSet
、未使用の行ってきました。他の参照がそれを指していないと、そのセットは、最終的なガベージコレクションの候補になりました。