Проблемы с получением данных из файла JSON обратно - PullRequest
0 голосов
/ 05 ноября 2018

Итак, мне удалось сохранить данные из массива в файл json. Этот массив создается вручную, как вы можете видеть по 8 item.add(...), и каждый элемент имеет 4 значения. isSelected, userName, userAttack, userStatus и isFavorite. Только isSelected и isFavorite изменятся через onItemClickListeners и имеют тип boolean. Я хочу сохранить изменение этих значений, как только я нажму на элемент, и он сработает. Журналы покажут мне, что json - это массив со всей информацией внутри.

Моя проблема заключается в получении этой информации при создании приложения, и я не знаю, где ее разместить. Не только это, но я не знаю, как использовать файл json в onCreate, потому что json создается только когда я нажимаю или нажимаю на элементы. Может ли кто-нибудь дать мне подсказку о том, как успешно позволить приложению запомнить значения элемента? Был бы очень благодарен.

    //package and imports 

    public class MainActivity extends Activity {

    ListView listView;
    private String msg = "Android : ";
    private boolean isChecked;

    ArrayList<UserModel> item = new ArrayList<>();

     @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ArrayList<UserModel> item = new ArrayList<>();
        listView = (ListView) findViewById(R.id.list_view);


            item.add(new UserModel(false, R.string.name0, R.string.atk0, R.string.stat0,false));
            item.add(new UserModel(false, R.string.name1, R.string.atk1, R.string.stat1,false));
            item.add(new UserModel(false, R.string.name2, R.string.atk2, R.string.stat2,false));
            item.add(new UserModel(false, R.string.name3, R.string.atk3, R.string.stat3,false));
            item.add(new UserModel(false, R.string.name4, R.string.atk4, R.string.stat4,false));
            item.add(new UserModel(false, R.string.name5, R.string.atk5, R.string.stat5,false));
            item.add(new UserModel(false, R.string.name6, R.string.atk6, R.string.stat6,false));
            item.add(new UserModel(false, R.string.name7, R.string.atk7, R.string.stat7,false));

            Log.d(msg, "Made UserModel List with size: " + item.size());


        final CustomAdapter adapter = new CustomAdapter(this, item);
        listView.setAdapter(adapter);


        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d(msg,"Item " + i + " was long clicked!");

                UserModel model = item.get(i);

                if(model.isFavorite()) {
                    model.setFavorite(false);
                    Log.d(msg, "Item " + i + " was removed as Favorite!");
                    Toast.makeText(view.getContext(),  model.getUserName() + i + " was removed from Favorites!", Toast.LENGTH_SHORT).show();
                } else {
                    model.setFavorite(true);
                    Log.d(msg, "Item " + i + " was added as Favorite!");
                    Toast.makeText(view.getContext(),model.getUserName() + i + " was added to Favorites!",Toast.LENGTH_SHORT).show();
                }

                item.set(i, model);

                adapter.updateRecords(item);

                Gson gson = new Gson();
                String json = gson.toJson(item);

                Log.d(msg, "Here is the json file: " + json);


                return model.isFavorite();
                }
        });


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Log.d(msg, "Item " + (i) + " was clicked!");
                UserModel model = item.get(i);


                if (model.isSelected())
                    model.setSelected(false);
                else
                    model.setSelected(true);
                    Log.d(msg, "Item " + (i) + " " + model.isSelected());

                item.set(i, model);

                //now update adapter
                adapter.updateRecords(item);

                Gson gson = new Gson();
                String json = gson.toJson(item);

                Log.d(msg, "Here is the json file: " + json);

            }



        });

    }

}

1 Ответ

0 голосов
/ 05 ноября 2018

Если я понял ваш вопрос, вот как вы можете загрузить данные json onCreate.

ArrayList<UserModel> items = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Load json to string from the file you saved it in
    ...
    String rawJson = "...";

    //Parse data to your list
    ...
    items = gson.fromJson(br, new TypeToken<List<UserModel>>(){}.getType());
}

Однако я бы порекомендовал заняться хранением ваших данных в локальной базе данных, поскольку их проще обновлять и управлять ими. Хранить json в файле очень некрасиво.

Вы можете проверить библиотеки как Комната .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...