2016-04-23 2 views
1

Wie Toast der zugehörige Wert auf den String-Wert ausgewählt aus dem SPINNER.Wie zeigt/TOAST das zugehörige Element des String-Arrays auf Spinner aus Xml Parsing ausgewählt

enter image description here

Ich bin in der Lage, die Spinner Datenaus dem unter XML-Format aber nicht in der Lage zu passieren seinen id, um sie für Toast zu bekommen.

**

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

    } 
} 

Update: 1

Wenn ich den obigen Code wie unten beschrieben ändere, erhalte ich alle IDs, wenn der erste Spinner in Logcat Log.d ("fromid fromid", "fromid:" + fromid); aber wie man dies an den Spinner anhängt, so dass, wenn der pekuläre Wert angeklickt wird, seine spezielle ID Toasted ist.

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

Für, dass Sie die IDs aus der XML wie '' title' und title2' erhalten müssen. –

+0

@KNeerajLal siehe mein UPDATE: 1 –

+0

@KNeerajLal Von XML-Daten wie und von dieser Codezeile (String fromid = el.getElementsByTagName ("FromID"). Item (0) .getTextContent();) i Ich bekomme alle IDs in Logcat ...... sollte ich Arraylist für die IDs auch machen ..... und dann, wie werde ich das an die ersten Spinner Daten anfügen, um Toast zu sein, wenn geklickt –

Antwort

1

eine POJO Klasse erstellen für die XML-Antwort Städte.

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 
} 

Anstatt die XML jedes Mal Parsen Parsen sie alle in einer einzigen Schleife.

parse Methode

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

} 

Lagern Sie die Auswahl jedes spinner und immer dann, wenn sie sich ändert den Toast anzuzeigen.

onItemSelected Code

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; 
} 
+0

@K Neeraj Lal ich, was Sie fahren mich zu korrigieren Pfad .... und gibt es eine Möglichkeit, es in derselben MainActivity.java-Klasse zu tun, ohne die POJO-Klasse zu erstellen ..........Könnten Sie mir bitte Ihre E-Mail-ID geben? –

+0

@K Neeraj Lal yaa Ich habe auch pojo Klasse Ihnen das volle Projekt geschickt –