2013-08-01 5 views
6

Ich möchte den Code von einer URL-Quelle (XML-Daten) erhalten Wie soll ich das tun? Ich kann die Datenquelle als Listenansicht abrufen. Ich konnte es jedoch nicht gefiltert bekommen.Filtern von SPINNER für XML-Daten, die abgerufen wurden

Example: 
spinner : "Today","Tomorrow" 
Upon select "Today" 
it will show out the events for today. 
Upon select "Tomorrow" 
it will show out the events for tomorrow. 

Kann mir jemand helfen?

Ich habe die Codierung ausprobiert, jedoch habe ich einen Fehler festgestellt.

Ich möchte die XML-Daten von hier kommt man hin:

<start_time>2013-09-25 09:00:00 </start_time> 

[Screenshot von XML] [1]

Hier ist mein Java-Code:

public class AndroidXMLParsingActivity extends ListActivity implements OnItemSelectedListener { 

    String[] browseby; 
    Date d = new Date(); 

    String[] dates = { "Today", "Tomorrow", "Next Week", 

    }; 

    ArrayList<String> browse = new ArrayList<String>(); 
    ArrayList<String> mPostingData = new ArrayList<String>(); 
    Spinner s1; 
    ListView listview; 
    CustomAdapter cus; 

    // All static variables 
    static final String URL = "http://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore"; 
    // XML node keys 
    static final String KEY_EVENT = "event"; // parent node 
    static final String KEY_TITLE = "title"; 
    static final String KEY_START_TIME = "start_time"; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_EVENT); 
     // looping through all item nodes <item> 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      // adding each child node to HashMap key => value 
      map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 


      map.put(KEY_START_TIME, parser.getValue(e, KEY_START_TIME)); 

      // adding HashList to ArrayList 
      menuItems.add(map); 
     } 

     // Adding menuItems to ListView 
     ListAdapter adapter = new SimpleAdapter(this, menuItems, 
       R.layout.list_item, new String[] { KEY_TITLE,KEY_START_TIME }, new int[] { 
         R.id.title, 
         R.id.startTime }); 

     setListAdapter(adapter); 

     // selecting single ListView item 
     ListView lv = getListView(); 

     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // getting values from selected ListItem 
       String title = ((TextView) view.findViewById(R.id.title)) 
         .getText().toString(); 


       // Starting new intent 
       Intent in = new Intent(getApplicationContext(), 
         SingleMenuItemActivity.class); 
       in.putExtra(KEY_TITLE, title); 


       startActivity(in); 

      } 
     }); 
     listview = (ListView) findViewById(R.id.listView1); 
     s1 = (Spinner) findViewById(R.id.spinner1); 
     for (int i = 0; i < browseby.length; i++) { 
      browse.add(browseby[i]); 
     } 

     // aa = new 
     // ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category); 
     s1.setOnItemSelectedListener(this); 
     mPostingData = browse; 
     for (int i = 0; i < mPostingData.size(); i++) { 
      if (mPostingData.size() > 0) 
       Log.i("Datas", mPostingData.get(i)); 
     } 
     cus = new CustomAdapter(this, 0); 
     setListAdapter(cus); 

     ArrayAdapter<String> aa = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, dates); 

     aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     s1.setAdapter(aa); 
     } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, 
      long id) { 
     // listview.setFilterText(Category[position]); 
     String Text = s1.getSelectedItem().toString(); 
     cus.getFilter().filter(Text); 
     cus.notifyDataSetChanged(); 
     } 

     public void onNothingSelected(AdapterView<?> parent) { 
     // listview.setFilterText(""); 
     } 

     public void onListItemClick(ListView parent, View v, int position, long id) { 
     Toast.makeText(this, "You have selected " + mPostingData.get(position), 
       Toast.LENGTH_SHORT).show(); 
     } 

     class CustomAdapter extends ArrayAdapter<String> { 

     public void setData(ArrayList<String> mPpst) { 
      mPostingData = mPpst;// contains class items data. 
     } 

     @Override 
     public Filter getFilter() { 
      return new Filter() { 
       @Override 
       protected void publishResults(CharSequence constraint, 
         FilterResults start_time) { 
        if (start_time != null && start_time.count >= 0) { 
         setData((ArrayList<String>) start_time.values); 
        } else { 
         setData(browse);// set original values 
        } 

        notifyDataSetInvalidated(); 
       } 

       @Override 
       protected FilterResults performFiltering(CharSequence constraint) { 
        FilterResults result = new FilterResults(); 
        if(constraint=="Today") { 

         constraint = constraint.toString(); 
         CharSequence s = DateFormat.format("yyyy-MM-dd ", d.getTime()); 
         ArrayList<String> foundItems = new ArrayList<String>(); 
         if (browse != null) { 
          for (int i = 0; i < browse.size(); i++) { 

           if (browse.get(i).contains(s)){ 
            System.out.println("My datas" + browse.get(i)); 
            foundItems.add(browse.get(i)); 

           } else { 



           } 
          } 
         } 
         result.count = foundItems.size();// search results found 
                  // return count 
         result.values = foundItems;// return values 
        } else { 
         result.count = -1;// no search results found 
        } 

        return result; 
       } 
      }; 
     } 

     LayoutInflater mInflater; 

     public CustomAdapter(Context context, int textViewResourceId) { 
      super(context, textViewResourceId); 
      // TODO Auto-generated constructor stub 
      mInflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return mPostingData.size(); 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      ViewHolder vh; 
      if (convertView == null) { 
       vh = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.row, null); 
       vh.t1 = (TextView) convertView.findViewById(R.id.textView1); 

       convertView.setTag(vh); 
      } else { 
       // Get the ViewHolder back to get fast access to the TextView 
       // and the ImageView. 
       vh = (ViewHolder) convertView.getTag(); 
      } 
      if (mPostingData.size() > 0) 
       vh.t1.setText(mPostingData.get(position)); 
      return convertView; 
     } 

     } 

     static class ViewHolder { 
     TextView t1; 
     } 
     } 
+0

Ihr Code-Hervorhebung nicht richtig gemacht wird, müssen Sie alles weitere vier Räume einrücken. Leider sind diese Änderungen von mir noch nicht akzeptabel. –

+0

Wissen Sie, wie man Datumsangaben filtert? Ich stecke derzeit an dem Teil auf Filtern nach Daten. – randomize

+0

@ sigmavirus24 kannst du mich führen? – randomize

Antwort

0

würde ich Erstellen Sie stattdessen eine Datenbank und legen Sie alle Daten darin ab. Durch die korrekte Verwendung von SQL-, PHP- und JSON-Parsing werden Sie in der Lage sein, die richtigen Daten zu erhalten. Ich empfehle Ihnen, eine Datenbank zu verwenden, da die Daten in SQL viel besser manipuliert werden können.

Zum Beispiel die Ereignisse für ein aktuelles Datum zu bekommen und sie zu sortieren würde sehr leicht durch eine SQL-Abfrage erfolgen. Das folgende Tutorial sollten Sie eine Kickstart geben helfen:

how to connect Android with PHP/mySQL

+0

Können Sie bitte diese Antwort upvote, wenn es Ihnen geholfen hat? –