java - 如何使用 json 文件显示自动完成字段的建议?

标签 java android json android-fragments autocompletetextview

我有这个 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 解析为 fragment 的代码

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 崔克 圣诞老人 斯科特

显示所有带“T”的值

实际输出

输入文本:BI

建议显示:{"GNT": "GIANT","TRL": "TREEK","CNN": "CNDALE","ST": "SANTA","SCT": "SCOTT"

最佳答案

  1. 在这行代码中 - mArrayStringLookupProduct.add(String.valueOf(brand)); 您正在将整个 jsonObject 添加到 mArrayStringLookupProduct ArrayList 中。
  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));
   }        

关于java - 如何使用 json 文件显示自动完成字段的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56388750/

相关文章:

java - 如何重定向到 j_spring_security_check

java - Smack 无需聊天即可发送和接收消息

android - 什么触发了 BluetoothDevice.ACTION_ACL 广播?

java - 工具栏后退按钮和onBackPressed方法的区别

json - 在 JSON::XS for Perl 中用 "\u four-hex-digits"编码

xml - 谷歌 Protocol Buffer vs json vs XML

java - sun-java6-jdk 安装后 : JAVA_HOME not found./usr/jdk 未找到

java - 二进制事件协议(protocol)

android - 我如何处理 CircleCI 2.0 上的 Gradle 缓存?

json - 数据工厂将数据源复制为接收器对象的主体