gpt4 book ai didi

java - 如何在从 xml 解析中选择的微调器上显示/烘烤字符串数组的相关项

转载 作者:行者123 更新时间:2023-11-30 01:23:06 29 4
gpt4 key购买 nike

如何Toast相关值到从微调器中选择的字符串值。

enter image description here

我能够从下面的 xml 格式中获取微调器数据,但无法将其id 传递给它们以进行 toast 。

**

APIGetCitiesResponse xmlns="http://xxxx">
<APIGetCitiesResult xmlns:a="http://xxxx.xxx" xmlns:i="http://www.w3.org/2010/XMLSchema-instance">
<a:Pair>
<a:FromID>10</a:FromID> <---This should Toast---->
<a:FromName>INDIA</a:FromName><---On selecting this from spinner ------->
<a:ToID>30</a:ToID>
<a:ToName>TURKEY</a:ToName>
</a:Pair>
<a:Pair>
<a:FromID>40</a:FromID>
<a:FromName>USA</a:FromName>
<a:ToID>10</a:ToID>
<a:ToName>INDIA</a:ToName>
</a:Pair>
<a:Pair>
<a:FromID>19</a:FromID>
<a:FromName>CHINA</a:FromName>
<a:ToID>40</a:ToID>
<a:ToName>USA</a:ToName>
</a:Pair>
<a:Pair>
<a:FromID>30</a:FromID>
<a:FromName>TURKEY</a:FromName>
<a:ToID>10</a:ToID>
<a:ToName>INDIA</a:ToName>
</a:Pair>
</Result>
</Response>

**

MainActivity.java

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener, OnClickListener {

ArrayList<String> title;
ArrayList<String> title2;
Button button;
Spinner spinner;
Spinner spinner2;
private EditText fromDateEtxt;
//private EditText toDateEtxt;

private DatePickerDialog fromDatePickerDialog;
//private DatePickerDialog toDatePickerDialog;

private SimpleDateFormat dateFormatter;

ArrayAdapter<String> from_adapter;
ArrayAdapter<String> from_adapter2;
Map<String, List<String>> values = new HashMap<String, List<String>>();
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


title = new ArrayList<String>();
title2 = new ArrayList<String>();

button = (Button) findViewById(R.id.button1);
spinner = (Spinner) findViewById(R.id.spinner1);
spinner.setOnItemSelectedListener(this);

spinner2 = (Spinner) findViewById(R.id.spinner2);
//spinner2.setOnItemSelectedListener(this);
dateFormatter = new SimpleDateFormat("dd-MM-yyyy", Locale.US);
findViewsById();

setDateTimeField();
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}


button.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

parse();

from_adapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title);
from_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
title2.clear();
from_adapter2=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title2);
from_adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


spinner.setAdapter(from_adapter);
//from_adapter2.clear();
//from_adapter2.notifyDataSetChanged();
spinner2.setAdapter(from_adapter2);


}

private Object from_adapter(int i) {
// TODO Auto-generated method stub
return null;
}

});


}
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
String lang_Name = parent.getItemAtPosition(pos).toString();
List<String> lang_Key = values.get(lang_Name);
from_adapter2.clear();
for(String s : lang_Key){
from_adapter2.insert(s, from_adapter2.getCount());
}
from_adapter2.notifyDataSetChanged();
Toast.makeText(parent.getContext(), ""+lang_Key,
Toast.LENGTH_LONG).show();
}

public void onNothingSelected(AdapterView<?> arg0) {
}

protected void parse() {
// TODO Auto-generated method stub


try {

URL url = new URL(
"www.example.com");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("a:Pair");
for (int i = 0; i < nodeList.getLength(); i++) {
Element el = (Element) nodeList.item(i);
// get the a:W value
String awValue = el.getElementsByTagName("a:FromName").item(0).getTextContent();
// add the above value in our map as key if it isn't present in the map, this key will
// have a list associated with it in which ALL the values for a:R will be stored, if
// the awValue key is present then you just add the new a:R value to its list
if (!values.containsKey(awValue)) {
values.put(awValue, new ArrayList<String>());

}
// also add the value pointed by a:R to the list associated with a:W
String arValue = el.getElementsByTagName("a:ToName").item(0).getTextContent();
values.get(awValue).add(arValue);

// Log.d("ADebugTag", "Value: " + arValue);
}
Log.d("ADebugTag", "Value: " + values);
for (int i = 0; i < nodeList.getLength(); i++) {

Node node = nodeList.item(i);

Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("a:FromName");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();

NodeList websiteList = fstElmnt.getElementsByTagName("a:ToName");
Element websiteElement = (Element) websiteList.item(0);
websiteList = websiteElement.getChildNodes();

title.add(((Node) nameList.item(0)).getNodeValue());

}
NodeList nodeList2 = doc.getElementsByTagName("a:Pair");
for (int i = 0; i < nodeList2.getLength(); i++) {

Node node = nodeList2.item(i);

Element fstElmnt = (Element) node;
NodeList nameList = fstElmnt.getElementsByTagName("a:ToName");
Element nameElement = (Element) nameList.item(0);
nameList = nameElement.getChildNodes();
title2.add(((Node) nameList.item(0)).getNodeValue());

}
Set<String> set = new LinkedHashSet<String>(title);
title = new ArrayList<String>(set);
// Collection<String> set = new LinkedHashSet<String>(months);
Set<String> set2 = new LinkedHashSet<String>(title2);
title2 = new ArrayList<String>(set2);
System.out.println("list are");
System.out.println(set);
System.out.println("list 2 are");
System.out.println(set2);
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}

}

@Override
public void onClick(View view) {
if(view == fromDateEtxt) {
fromDatePickerDialog.show();
} else {
Log.d("errorrrr", "soryy");
}

}
}

更新:1

在对上面的代码进行如下更改时,如果 Logcat Log.d("fromid fromid", "fromid: "+ fromid) 中的第一个微调器,我将获得所有 ID;但是如何将它附加到微调器,以便如果单击特定值,则其特定 id 为 Toasted。

 NodeList nodeList = doc.getElementsByTagName("Pair");
for (int i = 0; i < nodeList.getLength(); i++) {
Element el = (Element) nodeList.item(i);

String awValue = el.getElementsByTagName("FromName").item(0).getTextContent();
if (!values.containsKey(awValue)) {
values.put(awValue, new ArrayList<String>());
String fromid = el.getElementsByTagName("FromID").item(0).getTextContent();
Log.d("fromid fromid", "fromid: " + fromid);

}
String arValue = el.getElementsByTagName("ToName").item(0).getTextContent();
values.get(awValue).add(arValue);
}

最佳答案

为 xml 响应城市创建一个 POJO 类。

City.java

public class City {
int id;
String name;

public City() {
}

public City(int id, String name) {
this.id = id;
this.name = name;
}
//getters ad setters
}

与其每次都解析 xml,不如在一个循环中解析所有内容。

解析方法

Map<Integer, City> to = new HashMap<>();
Map<Integer, City> from = new HashMap<>();

protected void parse() {
try {
URL url = new URL("https://raw.githubusercontent.com/kushagrakhare/g/master/test.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("a:CityPair");
for (int i = 0; i < nodeList.getLength(); i++) {
Element el = (Element) nodeList.item(i);
// get the a:W value
String fromCityName = el.getElementsByTagName("a:FromCityName").item(0).getTextContent();
int fromCityID = Integer.parseInt(el.getElementsByTagName("a:FromCityID").item(0).getTextContent());
int toCityID = Integer.parseInt(el.getElementsByTagName("a:ToCityID").item(0).getTextContent());
String toCityName = el.getElementsByTagName("a:ToCityName").item(0).getTextContent();

City from1 = new City(fromCityID, fromCityName);
City to1 = new City(toCityID, toCityName);
from.put(fromCityID, from1);
to.put(toCityID, to1);
}

for (City item : from.values()) {
title.add(item.getName());
}

for (City item : to.values()) {
title2.add(item.getName());
}

} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}

}

存储每个微调器的选择,并在它更改时显示 toast 。

onItemSelected代码

int spinner1SelectionPos;
int spinner2SelectionPos;
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch (parent.getId()) {
case R.id.spinner1:
spinner1SelectionPos = pos;
break;
case R.id.spinner2:
spinner2SelectionPos = pos;
break;
}

int fcityKey = getMapKey(from, title.get(spinner1SelectionPos));
int tcityKey = getMapKey(to, title2.get(spinner2SelectionPos));

String message = title.get(spinner1SelectionPos) + " " + fcityKey
+ " " + title2.get(spinner2SelectionPos) + " " + tcityKey;

Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}

//for getting key from a map using value
private int getMapKey(Map<Integer, City> map, String value) {
for (Map.Entry<Integer, City> item : map.entrySet()) {
if (item.getValue().getName().equals(value)) return item.getKey();
}

return -1;
}

关于java - 如何在从 xml 解析中选择的微调器上显示/烘烤字符串数组的相关项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807013/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com