1

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());
    }
}
Eypro Corp
  • 11
  • 3

0 Answers0