Как отобразить предложение для поля автозаполнения с помощью файла json?

У меня есть этот json, у которого есть «код продукта» внутри этого кода продукта, есть еще один jsonobject и строка.

Я хочу, чтобы при вводе «кода продукта» отображалось предлагаемое описание.

Я уже получаю отображение предлагаемого описания, когда ввожу код описания продукта, но кажется, что оно отображается неправильно.

Я имею в виду, что когда я набираю «код продукта» «BI», отображение предлагаемого описания выглядит следующим образом.

{"GNT": "GIANT", "TRL": "TREEK", "CNN": "CNDALE", "ST": "SANTA", "SCT": "SCOTT"}

вот мой json

{
    "BI": {
        "desc": {
            "MBIK": "MOUNTAIN BIKE",
            "FBIK": "FOLDING BIKE",
            "EBIK": "E-BIKE",
            "OTHER": "OTHER"
        },
        "brand": {
            "GNT": "GIANT",
            "TRL": "TREEK",
            "CNN": "CNDALE",
            "STC": "SANTA",
            "SCT": "SCOTT"
        },
        "category": "BICYCLE & EBIKE STORE"
    },
    "CA": {
        "desc": {
            "CARA": "CAR AUDIO",
            "CARS": "CAR SPEAKER",
            "TIRE": "CAR TIRE",
            "OTHER": "OTHER"
        },
        "brand": {
            "AIC": "AICHI",
            "BRI": "BRIGDESTONE",
            "CON": "CONTINENTAL",
            "DUN": "DUNLOP",
            "FAL": "FALKEN GR"
        }
                "category": "CAR ACCESORIES"
    }, 
        and so on.. { 
                    }
}

вот мой код для разбора моего json на мой фрагмент

private void loadLookupCategoryJson() {

        mLookupProducts = new ArrayList<>();
        mArrayStringLookupProduct = new ArrayList<>();

        try {
            JSONObject json = new JSONObject(loadLookupBrandJSON());
            Iterator<String> keys = json.keys();

            while(keys.hasNext()) {
                String key = keys.next();
                JSONObject obj = (JSONObject) json.get(key);

                JSONObject brand = obj.getJSONObject(Keys.CATEGORY_BRAND);
                JSONObject desc =  obj.getJSONObject(Keys.CATEGORY_DESC);
                String category = obj.getString(Keys.CATEGORY);

                LookupProducts lookupProduct = new LookupProducts(key, brand, desc, category);
                mLookupProducts.add(lookupProduct);
                mArrayStringLookupProduct.add(String.valueOf(brand));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

и вот мое, чтобы получить динамическое поле бренда

} else if (format.equalsIgnoreCase(Keys.AUTO_COMPLETE_FIELD)) {
 addTextViews(title);
 addAutoCompleteField(desc, inputType, title, mKeys.get(i), mArrayStringLookupProduct, maxLength, minLength);
} 

Я ожидаю, что вывод должен быть таким

ВВОД ТЕКСТА: Т

РЕКОМЕНДУЕМЫЙ ДИСПЛЕЙ: ГИГАНТ ТРЕК САНТА СКОТТ

Отобразить все значения с помощью «T»

фактический результат

ВВОД ТЕКСТА: БИ

РЕКОМЕНДУЕМЫЙ ОТОБРАЖЕНИЕ: {"GNT": "GIANT", "TRL": "TREEK", "CNN": "CNDALE", "ST": "SANTA", "SCT": "SCOTT"}

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
190
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. В этой строке кода - mArrayStringLookupProduct.add (String.valueOf (бренд)); Вы добавляете весь jsonObject в mArrayStringLookupProduct ArrayList.
  2. Вам нужны только значения бренда JSONObject в этом ArrayList.

Вы можете внести следующие изменения:

   JSONObject brand = obj.getJSONObject(Keys.CATEGORY_BRAND);
   JSONObject desc =  obj.getJSONObject(Keys.CATEGORY_DESC);
   String category = obj.getString(Keys.CATEGORY);
   lookupProduct = new LookupProducts(key, brand, desc, category);
   mLookupProducts.add(lookupProduct);

   // iterate every brand key, fetch its value and add in arrayList
   Iterator<String> brandKeys = brand.keys();
   while(brandKeys.hasNext()) {
        String bKey = brandKeys.next();
        mArrayStringLookupProduct.add((String) brand.get(bKey));
   }        

Я получил ошибку со «значениями» в этом коде mArrayStringLookupProduct.addAll(brand.values());

Marie 31.05.2019 10:31

я использовал библиотеку org.json.simple, в которой был метод values() для jsonObject, но логика осталась прежней. Вам нужны только ценности бренда. Перебрать ключи бренда jsonObject, получить его значения и сохранить в arrayList.

Nitika 31.05.2019 10:53

Я рад, что смог помочь.

Nitika 31.05.2019 13:32

Другие вопросы по теме