Как правильно преобразовать объект в GSON (JSON)?

У меня проблема с преобразованием объекта bandClient в JSON (я хочу сохранить объект для последующего использования в SHARED PREFS (ANDROID)).

Я пытался сделать это с помощью GSON, но во время выполнения

String json = gson.toJson(bandClient);

Я всегда получаю следующее исключение:

Процесс: xxr.com.mitracker, PID: 19040 java.lang.StackOverflowError на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380) на com.google.gson.internal. $Gson$Types.resolve($Gson$Types.java:375) на com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380) на com.google.gson.internal. $Gson$Types.resolve($Gson$Types.java:375) на com.google.gson.internal.$Gson$Types. решить ($Gson$Types.java:380)

Как я могу решить это правильно, пожалуйста?

Большое спасибо за любой совет

Код метода:

private AdapterView.OnItemClickListener onListItemClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            BandInfo[] pairedBands =
                    BandClientManager.getInstance().getPairedBands();

            Logger.d("Clicked on item " + position);
            final BandClient bandClient =
                    BandClientManager.getInstance().create(context, pairedBands[position]);
            //mBandList.get(position).getBandClient();

            MsBandHelperAssync asyncTask = new MsBandHelperAssync(new AsyncResponse() {
                @Override
                public void processFinish(Boolean output) {
                    try {
                        Logger.d("RETURNED " + output);
                        Gson gson = new Gson();
                        Logger.d("PLAIN OBJECT" + bandClient);
                        gson.toJsonTree(bandClient);
                        Logger.d("PASSED");
                        String json = gson.toJson(bandClient);
                        Logger.d("PASSED JSON" + json);
                        //Prefs.putString(Constants.Global.SHARED_PREFS_KEY_PAIRED_DEVICES, json);
                        Logger.d("Saved");
                        //CommonHelper.redirectToActivity(context, mActivity, DashboardActivity.class);
                    } catch (Exception e) {
                        Logger.e(e.getMessage());
                    }

                }
            });
            asyncTask.execute(bandClient);

person redrom    schedule 22.03.2016    source источник
comment
Вы получаете StackOverflowError, потому что застряли в бесконечном рекурсивном цикле.   -  person chRyNaN    schedule 23.03.2016
comment
Не могли бы вы сказать мне, где?   -  person redrom    schedule 23.03.2016


Ответы (1)


BandClient представляет собой соединение с BandService, поддерживаемое Micrsoft Health. Таким образом, он содержит ссылку на действие, службу или контекст приложения, использованные для его создания. И это не сработает, если вы сохраните его для последующего использования.

Поэтому вместо этого вы, вероятно, захотите сохранить MAC-адрес объекта BandInfo, связанного с BandClient, который вы хотите сохранить, а затем воссоздать BandClient, когда захотите его использовать.

person Antion19    schedule 22.03.2016
comment
Спасибо, я не знал, что mac адрес можно получить из объекта bandInfo. - person redrom; 23.03.2016