Json使用自动完成功能进行解析

时间:2016-03-16 14:05:19

标签: java android json autocompletetextview

我创建了一个获取jsonarray并将其放入列表的活动。接下来,我已经将一个AutoCompleteTextView分配给一个字段,该字段使用json对象。

在我的jsonarray中有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();
        }
    }
}

修改

这就是我为List部分所做的。

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



        }

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

创建一个像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。

答案 2 :(得分:0)

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