Как отобразить предложение для автозаполнения поля, используя файл json? - PullRequest
1 голос
/ 31 мая 2019

У меня есть этот 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

ПРЕДЛАГАЕМЫЙ ДИСПЛЕЙ: GIANT TREEK SANTA SCOTT

Показать все значения с помощью "T"

фактический выход

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

ПРЕДЛАГАЕМЫЙ ДИСПЛЕЙ: {"GNT":" GIANT "," TRL ":" TREEK "," CNN ":" CNDALE "," ST ":" SANTA "," SCT ":" SCOTT "}

1 Ответ

1 голос
/ 31 мая 2019
  1. В этой строке кода - mArrayStringLookupProduct.add (String.valueOf (brand)); Вы добавляете весь объект jsonObject в список массивов mArrayStringLookupProduct.
  2. В этом списке ArrayList вам нужны только ценности бренда JSONObject.

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

   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));
   }        

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