2013-01-12 24 views
0

我有一个Rss feed,我正在解析成列表视图。我想让这个应用程序每天只显示一个项目。例如,当用户登录到应用程序时,我希望他们只能从列表视图中看到第一天的项目,那么当他们在第二天登录时,他们将从列表视图中看到第一天和第二天。我将如何去实现这一目标?下面是我使用这个如何使rss feed在android中每天只显示一个项目

主要活动代码

public class AndroidXMLParsingActivity extends ListActivity { 

// All static variables 
static final String URL = "http://www.cpcofc.org/devoapp.xml"; 
// XML node keys 
static final String KEY_ITEM = "item"; // parent node 
static final String KEY_ID = "item"; 
static final String KEY_NAME = "title"; 
static final String KEY_COST = "description"; 
static final String KEY_DESC = "description"; 

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

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.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_ITEM); 
    // 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_ID, parser.getValue(e, KEY_ID)); 
     map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 
     map.put(KEY_COST, parser.getValue(e, KEY_COST)); 
     map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 

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

    // Adding menuItems to ListView 
    ListAdapter adapter = new SimpleAdapter(this, menuItems, 
      R.layout.list_item, 
      new String[] { KEY_DESC, KEY_NAME, KEY_COST}, new int[] { 
        R.id.desciption, R.id.name, R.id.cost}); 

    setListAdapter(adapter); 

    Collections.reverse(menuItems); 

    // 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 name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString(); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
      in.putExtra(KEY_NAME, name); 
      in.putExtra(KEY_COST, cost); 
      startActivity(in); 

     } 
    }); 
} 
} 

RSS解析器

public class XMLParser { 

// constructor 
public XMLParser() { 

} 

/** 
* Getting XML from URL making HTTP request 
* @param url string 
* */ 
public String getXmlFromUrl(String url) { 
    String xml = null; 

    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     xml = EntityUtils.toString(httpEntity); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // return XML 
    return xml; 
} 

/** 
* Getting XML DOM element 
* @param XML string 
* */ 
public Document getDomElement(String xml){ 
    Document doc = null; 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    try { 

     DocumentBuilder db = dbf.newDocumentBuilder(); 

     InputSource is = new InputSource(); 
      is.setCharacterStream(new StringReader(xml)); 
      doc = db.parse(is); 

     } catch (ParserConfigurationException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      Log.e("Error: ", e.getMessage()); 
      return null; 
     } 

     return doc; 
} 

/** Getting node value 
    * @param elem element 
    */ 
public final String getElementValue(Node elem) { 
    Node child; 
    if(elem != null){ 
     if (elem.hasChildNodes()){ 
      for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
       if(child.getNodeType() == Node.TEXT_NODE ){ 
        return child.getNodeValue(); 
       } 
      } 
     } 
    } 
    return ""; 
} 

/** 
    * Getting node value 
    * @param Element node 
    * @param key string 
    * */ 
public String getValue(Element item, String str) {  
     NodeList n = item.getElementsByTagName(str);   
     return this.getElementValue(n.item(0)); 
    } 
} 

这里被认为是什么样子,现在因为是

enter image description here

回答

0

存储他们首次登录时的首选日期(或磁盘上的其他日志) torage)。将数据加载到数组列表中时,通过使用标准日期函数来查明自第一次登录以来已经过了多长时间,并且只将许多项添加到列表中。

+0

听起来像这样对我很好,你知道一个教程或任何会告诉我如何做的,我从来没有与那些不熟悉它们的函数合作 – Bryan

+0

看看SharedPreferences类和SharedPreferences .Editor类。这些是你如何读/写一个偏好。您只需要在首次运行应用程序时编写自己的偏好设置,这样做的方法是检查它是否存在,如果不存在则编写它。对于日期操作,只需调用Date()即可获得今天的日期,然后通过使用Date.getTime()将其转换为毫秒来比较日期,然后再将其除以毫秒,然后再除以一天中的毫秒数。或者,如果您希望它在午夜时间翻转,请使用日历获取当天午夜的时间。 –

+0

谢谢你,这给我一个很好的起点和方向去 – Bryan

相关问题