简体   繁体   English

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

[英]How to SHOW/TOAST the related item of the string array on spinner selected from xml parsing

How to Toast the related value to the string value selected FROM THE SPINNER.如何Toast相关值到从 THE SPINNER 中选择的字符串值。

在此处输入图片说明

I am able to get the spinner data from the below xml format but not able to pass its id to them for toast.我能够从下面的 xml 格式中获取微调器数据但无法将其id传递给他们以进行吐司。

** **

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主活动.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");
        }

    }
}

Update :1更新:1

On making changes to the above code like below,I am getting all the ids if the first spinner in Logcat Log.d("fromid fromid", "fromid: " + fromid);在对上面的代码进行如下更改时,如果 Logcat Log.d("fromid fromid", "fromid: " + fromid); 中的第一个微调器,我将获得所有 ID。 but how to attach this to the spinner so that if pasticular value is clicked the its particular id is Toasted.但是如何将它附加到微调器,以便如果单击 pasticular 值,则其特定 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);
    }

Create a POJO class for the xml response cities.为 xml 响应城市创建一个 POJO 类。

City.java城市.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
}

Rather than parsing the xml each time, parse it all in a single loop.不是每次都解析 xml,而是在一个循环中解析它。

parse method parse方法

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

}

Store the selection of each spinner and whenever it changes display the toast.存储每个微调器的选择,每当它改变时显示吐司。

onItemSelected code 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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM