2013-08-01 57 views
6

Tôi muốn lấy mã từ một nguồn URL (Dữ liệu XML) Tôi nên làm như thế nào? Tôi có thể truy xuất nguồn dữ liệu dưới dạng chế độ xem danh sách. Tuy nhiên, tôi không thể lọc nó.Lọc SPINNER cho dữ liệu XML đã được truy xuất

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. 

Ai đó có thể giúp tôi không?

Tôi đã thử mã hóa, tuy nhiên, tôi đã gặp một số lỗi.

Tôi muốn để có được các dữ liệu XML từ đây:!

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

[Ảnh chụp màn hình của XML] [1]

Đây là mã Java của tôi:

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

nổi bật Mã của bạn không được thực hiện đúng cách, bạn cần phải thụt tất cả mọi thứ khác bốn không gian. Rất tiếc, các chỉnh sửa đó vẫn chưa được tôi chấp nhận. –

+0

Bạn có biết cách lọc ngày không? Tôi hiện đang bị kẹt trong phần lọc ngày. – randomize

+0

@ sigmavirus24 bạn có thể hướng dẫn tôi không? – randomize

Trả lời

0

tôi sẽ thay vì tạo một cơ sở dữ liệu và đặt tất cả dữ liệu trong đó. Thông qua việc sử dụng đúng cách phân tích cú pháp SQL, PHP và JSON, bạn sẽ có thể nhận được dữ liệu chính xác. Tôi đề nghị bạn sử dụng một cơ sở dữ liệu, vì dữ liệu có thể được thao tác theo một cách tốt hơn thông qua SQL.

Ví dụ việc nhận các sự kiện cho một ngày hiện tại và sắp xếp chúng sẽ rất dễ thực hiện thông qua một câu lệnh truy vấn SQL. Các hướng dẫn sau đây sẽ giúp bạn đưa ra một kickstart:

how to connect Android with PHP/mySQL

+0

Bạn có thể vui lòng upvote câu trả lời này nếu nó đã giúp bạn? –