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);
}
}
我制作了一个 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);
}
}