Как сохранить историю поиска в приложение?
В своем приложение я использую библиотеку MaterialSearchBar Проблема в том что пока я нахожусь в приложение, история поиска отображается, но как только я выхожу она пропадает. Пробовал сохранять всё с помощью SharedPreferences, но у меня нечего не отображается. Так же есть три лога: save, saves и load, последний не отображается вообще.
public class MainActivity extends AppCompatActivity implements MaterialSearchBar.OnSearchActionListener {
private MaterialSearchBar searchBar;
private List<String> lastSearches;
ArrayList<SaveSearchModel> arrayList;
String SAVE = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchBar = findViewById(R.id.search);
searchBar.setHint("Your product");
searchBar.setSpeechMode(true);
searchBar.setOnSearchActionListener(this);
loadSearchSuggestionFromDisk();
try {
saveSearchSuggestionToDisk(searchBar.getLastSuggestions().toString());
} catch(Exception e) {
e.printStackTrace();
}
}
// Saved search history
private void saveSearchSuggestionToDisk(String search) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
arrayList.add(new SaveSearchModel(search));
String json = gson.toJson(arrayList);
editor.putString("search_data", json);
editor.apply();
loadSearchSuggestionFromDisk();
Log.e("save", search);
}
// Load search history
private void loadSearchSuggestionFromDisk() {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("search_data", null);
Type type = new TypeToken<ArrayList<SaveSearchModel>>() {}.getType();
arrayList = gson.fromJson(json, type);
if (arrayList != null) {
for(int i = 0; i < arrayList.size(); i++) {
searchBar.getLastSuggestions();
Log.e("load", String.valueOf(arrayList));
}
}
}
@Override
public void onSearchStateChanged(boolean b) {
String state = b ? "enable" : "disable";
Toast.makeText(this, "Search " + state, Toast.LENGTH_SHORT).show();
}
@Override
public void onSearchConfirmed(CharSequence charSequence) {
SAVE = charSequence.toString();
Log.e("saves", searchBar.getLastSuggestions().toString());
Toast.makeText(this, "Searching " + charSequence.toString() + " ...", Toast.LENGTH_SHORT).show();
}
@Override
public void onButtonClicked(int i) {
switch (i) {
case MaterialSearchBar.BUTTON_NAVIGATION:
Toast.makeText(MainActivity.this, "Button Nav ", Toast.LENGTH_SHORT).show();
break;
}
}
}
При ответе указанном ниже в тег load я получаю null
а в тег save 2023-04-09 18:02:05.631 12134-12134/com.buratinoapps.materialsearchbarhistory E/saves: com.buratinoapps.materialsearchbarhistory.MainActivity$2@b234126
В коде изменил только метод loadSearchSuggestionFromDisk()
проверка на null
.
// Load search history
private List<String> loadSearchSuggestionFromDisk() {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE);
Gson gson = new Gson();
String json = sharedPreferences.getString("search_data", null);
Type type = new TypeToken<List<String>>() {}.getType();
List<String> lastSearches = gson.fromJson(json, type);
Log.e("load", String.valueOf(lastSearches));
if (lastSearches != null) {
return lastSearches;
} else {
return lastSearches = new List<String>() {
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(@Nullable Object o) {
return false;
}
@NonNull
@Override
public Iterator<String> iterator() {
return null;
}
@NonNull
@Override
public Object[] toArray() {
return new Object[0];
}
@NonNull
@Override
public <T> T[] toArray(@NonNull T[] a) {
return null;
}
@Override
public boolean add(String s) {
return false;
}
@Override
public boolean remove(@Nullable Object o) {
return false;
}
@Override
public boolean containsAll(@NonNull Collection<?> c) {
return false;
}
@Override
public boolean addAll(@NonNull Collection<? extends String> c) {
return false;
}
@Override
public boolean addAll(int index, @NonNull Collection<? extends String> c) {
return false;
}
@Override
public boolean removeAll(@NonNull Collection<?> c) {
return false;
}
@Override
public boolean retainAll(@NonNull Collection<?> c) {
return false;
}
@Override
public void clear() {
}
@Override
public String get(int index) {
return null;
}
@Override
public String set(int index, String element) {
return null;
}
@Override
public void add(int index, String element) {
}
@Override
public String remove(int index) {
return null;
}
@Override
public int indexOf(@Nullable Object o) {
return 0;
}
@Override
public int lastIndexOf(@Nullable Object o) {
return 0;
}
@NonNull
@Override
public ListIterator<String> listIterator() {
return null;
}
@NonNull
@Override
public ListIterator<String> listIterator(int index) {
return null;
}
@NonNull
@Override
public List<String> subList(int fromIndex, int toIndex) {
return null;
}
};
}
}
При отладке log save
я его не получаю в логах за то показывает лог saves
E/saves: com.buratinoapps.materialsearchbarhistory.MainActivity$2@606f068
А при загрузке в логе load
я получаю null
, а так же если в моем коде я получал историю поиска до того как закрою приложение то теперь её вообще не выводит.