SPINNER过滤XML数据已被检索 [英] Filtering SPINNER for XML data that had been retrieved

查看:291
本文介绍了SPINNER过滤XML数据已被检索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从一个URL源(XML数据),我应该怎么办了code?我能够检索数据源作为一个列表视图。但是,我不能把它过滤。

示例: 微调:今天,明天 当选择今天 它会显示出今天的事件。 当选择明天 它会显示出明天的事件。

有人能帮助我吗?

我已经试过了编码,但是,我遇到了一些错误。

我想从这里得到的XML数据:

< START_TIME> 2013年9月25日09:00:00< / START_TIME>

![XML截图] [1]

下面是我的Java code:

公共类AndroidXMLParsingActivity扩展ListActivity实现OnItemSelectedListener {     的String [] browseby;     日期D =新的日期();     的String []日期= {今天,明天,下周,     };     ArrayList的<字符串>浏览=新的ArrayList<字符串>();     ArrayList的<字符串> mPostingData =新的ArrayList<字符串>();     微调S1;     ListView控件列表视图;     CustomAdapter CUS;     //所有静态变量     静态最终字符串URL =htt​​p://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore;     // XML节点键     静态最后弦乐KEY_EVENT =事件; //父节点     静态最后弦乐KEY_TITLE =称号;     静态最后弦乐KEY_START_TIME =START_TIME;     @覆盖     公共无效的onCreate(包savedInstanceState){         super.onCreate(savedInstanceState);         的setContentView(R.layout.activity_main);         ArrayList的< HashMap的<字符串,字符串>>菜单项=新的ArrayList< HashMap的<字符串,字符串>>();         XMLParser的分析器=新XMLParser的();         XML字符串= parser.getXmlFromUrl(URL); //获取XML         文档DOC = parser.getDomElement(XML); //获取DOM元素         NodeList的NL = doc.getElementsByTagName(KEY_EVENT);         //遍历所有的项目节点<项目>         的for(int i = 0; I< nl.getLength();我++){             //创建新的HashMap             HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();             元素e =(元)nl.item(我);             //添加每个子节点HashMap中的key =>值             map.put(KEY_TITLE,parser.getValue(即KEY_TITLE));             map.put(KEY_START_TIME,parser.getValue(即KEY_START_TIME));             //添加HashList到ArrayList中             menuItems.add(图)         }         //添加菜单项到ListView控件         ListAdapter适配器=新SimpleAdapter(这一点,菜单项,                 R.layout.list_item,新的String [] {KEY_TITLE,KEY_START_TIME},新的INT [] {                         R.id.title,                         R.id.startTime});         setListAdapter(适配器);         //选择单一的ListView项         ListView的LV = getListView();         lv.setOnItemClickListener(新OnItemClickListener(){             @覆盖             公共无效onItemClick(适配器视图<>母公司视图中查看,                     INT位置,长的id){                 //从选择列表项获得价值                 字符串标题=((TextView中)view.findViewById(R.id.title))                         .getText()的toString()。                 //开始的新意图                 意图=新的意图(getApplicationContext()                         SingleMenuItemActivity.class);                 in.putExtra(KEY_TITLE,职称);                 startActivity(在);             }         });         列表视图=(ListView控件)findViewById(R.id.listView1);         S1 =(微调)findViewById(R.id.spinner1);         的for(int i = 0; I< browseby.length;我++){             browse.add(browseby [I]);         }         // AA =新         // ArrayAdapter<字符串>(这一点,android.R.layout.simple_list_item_1,类别);         s1.setOnItemSelectedListener(本);         mPostingData =浏览;         的for(int i = 0; I< mPostingData.size();我++){             如果(mPostingData.size()大于0)                 Log.i(DATAS,mPostingData.get(ⅰ));         }         CUS =新CustomAdapter(此,0);         setListAdapter(CUS);         ArrayAdapter<字符串> AA =新的ArrayAdapter<字符串>(这一点,                 android.R.layout.simple_spinner_item,日期);         aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);         s1.setAdapter(AA);         }     公共无效onItemSelected(适配器视图<>母公司,视图V,INT位置,             长ID){         // listview.setFilterText(类别[位置]);         文本字符串= s1.getSelectedItem()的toString()。         。cus.getFilter()过滤器(文本);         cus.notifyDataSetChanged();         }         公共无效onNothingSelected(适配器视图<>母公司){         // listview.setFilterText();         }         公共无效onListItemClick(ListView的父,视图V,INT位置,长的id){         Toast.makeText(这一点,你已经选择了+ mPostingData.get(位置),                 Toast.LENGTH_SHORT).show();         }         类CustomAdapter扩展ArrayAdapter<字符串> {         公共无效使用setData(ArrayList中<字符串> mPpst){             mPostingData = mPpst; //包含类项目的数据。         }         @覆盖         公共过滤用getFilter(){             返回新的过滤器(){                 @覆盖                 保护无效publishResults(CharSequence的约束,                         FilterResults START_TIME){                     如果(START_TIME = NULL和放大器;!&安培; start_time.count> = 0){                         使用setData((ArrayList中<字符串>)start_time.values​​);                     } 其他 {                         使用setData(浏览); //设置初始值                     }                     notifyDataSetInvalidated();                 }                 @覆盖                 保护FilterResults performFiltering(CharSequence的约束){                     FilterResults导致=新FilterResults();                     如果(约束==今天){                         约束= constraint.toString();                         CharSequence中= DateFormat.format(YYYY-MM-DD,d.getTime());                         ArrayList的<字符串> foundItems =新的ArrayList<字符串>();                         如果(浏览!= NULL){                             的for(int i = 0; I< browse.size();我++){                                 如果(browse.get(ⅰ)。载(多个)){                                     的System.out.println(我的DATAS+ browse.get(一));                                     foundItems.add(browse.get(ⅰ));                                 } 其他 {                                 }                             }                         }                         发现//搜索结果; result.count = foundItems.size()                                                             //返回计数                         result.values​​ = foundItems; //返回值                     } 其他 {                         发现//任何搜索结果; result.count = -1                     }                     返回结果;                 }             };         }         LayoutInflater mInflater;         公共CustomAdapter(上下文的背景下,INT textViewResourceId){             超(背景下,textViewResourceId);             // TODO自动生成构造函数存根             mInflater =(LayoutInflater)上下文                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);         }         @覆盖         公众诠释getCount将(){             // TODO自动生成方法存根             返回mPostingData.size();         }         @覆盖         众长getItemId(INT位置){             // TODO自动生成方法存根             返回的位置;         }         @覆盖         公共查看getView(INT位置,查看convertView,ViewGroup中父){             // TODO自动生成方法存根             ViewHolder VH;             如果(convertView == NULL){                 VH =新ViewHolder();                 convertView = mInflater.inflate(R.layout.row,NULL);                 vh.t1 =(TextView中)convertView.findViewById(R.id.textView1);                 convertView.setTag(VH);             } 其他 {                 //获取ViewHolder回得到快速访问的TextView                 //和ImageView的。                 VH =(ViewHolder)convertView.getTag();             }             如果(mPostingData.size()大于0)                 vh.t1.setText(mPostingData.get(位置));             返回convertView;         }         }         静态类ViewHolder {         TextView的T1;         }         }

解决方案

我宁愿创建一个数据库,并把所有数据都在里面。通过正确使用SQL,PHP和JSON解析,你将能够得到正确的数据。我建议你​​使用一个数据库,因为数据可以通过SQL操作在一个更好的方法。

例如获取事件的当前日期和排序他们将通过一个SQL查询语句很容易实现。下面的教程应该可以帮助你给一个Kickstart中:

如何安卓用PHP连接/ MySQL的

I would like to get the code from a URL sources(XML Data) How should I do that? I'm able to retrieve the data source as a list view. However, I couldn't get it filtered.

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.

Can someone help me out?

I've tried out the coding, however, I met some error.

I would like to get the XML data from here:

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

![Screenshot of XML][1]

Here is my 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;
        }
        }

解决方案

I would rather create a database and put all data in it. Through correct use of SQL, PHP and JSON parsing, you will be able to get the correct data. I am suggesting you to use a database, since the data can be manipulated in a much better way through SQL.

For example getting the events for a current date and sorting them would be very easily done through an SQL query statement. The following tutorial should help you give a kickstart:

how to connect Android with PHP/mySQL

这篇关于SPINNER过滤XML数据已被检索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆