Json 使用自动完成进行解析

Json parsing with autocomplete

我制作了一个 activity 获取 json 数组并将其放入列表中。接下来,我将一个 AutoCompleteTextView 分配给一个字段 来显示我正在使用的 json 对象。

在我的 json 数组中有 3 个对象:ItemID、ItemDescription 和 ItemVolume。我的 AutoCompleteTextView 字段包含 jsonObject: ItemDescription。

我需要在我的 onItemClickListner 中选择 itemDescription 时获取 itemID。

这是代码

ArrayAdapter<String> adp = new ArrayAdapter<String>(shoppingcart.this,
        android.R.layout.simple_dropdown_item_1line, responseList);
autocomplete.setAdapter(adp);
autocomplete.setThreshold(1);

private class GetContacts extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog pDialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new ProgressDialog(shoppingcart.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

    }

    @Override
    protected JSONObject doInBackground(String... args) {

        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(urlget);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        autocomplete.setThreshold(1);
        try {

            // Getting JSON Array from URL
            AllItems = json.getJSONArray(TAG_GETALL);
            for(int i = 0; i < AllItems.length(); i++) {
                JSONObject c = AllItems.getJSONObject(i);

                // Storing  JSON item in a Variable
                ID = c.getString(TAG_ID);
                Name = c.getString(TAG_NAME);
                Pris = c.getString(TAG_PRICE);

                // Adding value HashMap key => value

                responseList.add(Name);

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

编辑:

这就是我为列表部分所做的。

HashMap<String,Integer> ItemAndID= new HashMap<String,Integer>();
List<String> responseList = new ArrayList<String>();
 @Override
        protected void onPostExecute(JSONObject json) {
            pDialog.dismiss();

            try {
                 AllItems = json.getJSONArray(TAG_GETALL);
                for(int i = 0; i < AllItems.length(); i++) {
                    JSONObject c = AllItems.getJSONObject(i);

                    // Storing  JSON item in a Variable
                    ID = c.getInt(TAG_ID);
                    Name = c.getString(TAG_NAME);
                    Pris = c.getInt(TAG_PRICE);

                    // Adding value HashMap key => value

                    responseList.add(Name);


                    ItemAndID.put(Name, ID);


                }

对于 OnClick,我这样做了。

  @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String selectedName = (String) parent.getItemAtPosition(position);
            // if you used a HashMap
            ResultID = ItemAndID.get(selectedName);



        }

创建一个像 responseListItemId 这样的新列表,并将其与 responseList:

List<Integer> responseListItemId = new ArrayList<Integer>();
.....
@Override
protected void onPostExecute(JSONObject json) {

    JSONObject c = AllItems.getJSONObject(i);

    // Storing  JSON item in a Variable
    ID = c.getString(TAG_ID);
    Name = c.getString(TAG_NAME);
    Pris = c.getString(TAG_PRICE);

    // Adding value HashMap key => value

    responseList.add(Name);
    responseListItemId.add(ID);

}

现在从 responseList 中获取描述的索引值,并在 responseListItemId 中使用它来获取您的 itemID。

我的建议是为您的数据类型创建一个自定义 class,如 Product 和 10 创建一个自定义适配器,请参阅 https://guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView

See this example 您没有在任何地方保存 ItemId。如果你不想创建一个新的对象,你可以创建一个新的列表来保存 ItemIds 或者你可以创建一个 HaspMap<String, String> 像 ["name1":"id1","name2" :"id2"] 然后根据你用什么保存ItemId

setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
        String selectedName = (String) parent.getItemAtPosition(position);
        // if you used a HashMap
        String ID = exampleHashMap.get(selectedName);
    }
}