I'm trying to save and display the search history. To do this, I use the latest version of the library, the search history is displayed until I exit the application.'com.github.mancj:MaterialSearchBar:0.8.5'
MainActivity
public class MainActivity extends AppCompatActivity implements MaterialSearchBar.OnSearchActionListener {
private MaterialSearchBar searchBar;
private List<String> lastSearches;
private 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);
//restore last queries from disk
lastSearches = loadSearchSuggestionFromDisk();
searchBar.setLastSuggestions(lastSearches);
}
// Saved search history
private void saveSearchSuggestionToDisk(List lastSuggestions) {
}
// Load search history
private List<String> loadSearchSuggestionFromDisk() {
}
@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();
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;
case MaterialSearchBar.BUTTON_SPEECH:
Toast.makeText(this, "Search", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
saveSearchSuggestionToDisk(searchBar.getLastSuggestions());
}
}
On the library page at the very bottom there is an example of a simple application implementation using this library, there is an example for saving and displaying history in a List. But it's not entirely clear to me whether it is necessary to use an arrayList, whether it is necessary to create a model class and, in general, how to save and exit the search history?
Here I tried to create an example of what you need when you close the application to save all requests in the List
through the method saveSearchSuggestionToDisk(searchBar.getLastSuggestions());
But I have nothing and it didn't work
public class MainActivity extends AppCompatActivity implements MaterialSearchBar.OnSearchActionListener {
private MaterialSearchBar searchBar;
private List<String> lastSearches;
ArrayList<SaveSearchModel> searchModels;
private 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);
//restore last queries from disk
lastSearches = loadSearchSuggestionFromDisk();
searchBar.setLastSuggestions(lastSearches);
}
// Saved search history
private void saveSearchSuggestionToDisk(List lastSuggestions) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
lastSuggestions.add(new SaveSearchModel(lastSuggestions));
String json = gson.toJson(lastSuggestions);
editor.putString("search_data", json);
editor.apply();
loadSearchSuggestionFromDisk();
Log.e("save", json);
}
// 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> load = gson.fromJson(json, type);
if (load == null) {
List<String> finalLoad = load;
load = new List<String>() {
@Override
public int size() {
return finalLoad.size();
}
@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;
}
};
} else {
for(int i = 0; i < load.size(); i++) {
load = searchBar.getLastSuggestions();
Log.e("load", String.valueOf(load));
}
}
return searchBar.getLastSuggestions();
}
@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();
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;
case MaterialSearchBar.BUTTON_SPEECH:
Toast.makeText(this, "Search", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
saveSearchSuggestionToDisk(searchBar.getLastSuggestions());
}
}