-1

我正在尝试为 Android 构建一个简单的电视指南。为此,我正在使用来自一个站点的 RSS。我解析 XML,现在我想展示它。这个想法是一个列表,显示电台、当前节目和日期,当我按下列表中的某个项目时,它会给我一个新的活动,显示某个电视台的完整时间表。我已经设法将整个电视节目的各个部分分开在单独的字符串中(例如:06:00 新闻;07:15 电影)。我什至设法将它分开,以便填充 String[][](如:|06|、|00|、|News|;|07|、|15|、|Movie|)。我的想法是检查哪个最接近实时并显示它。

好吧,目前我的应用程序显示电视台、整个节目(时间表)和日期。我希望它只显示当前显示的内容。有人可以帮我解决这个问题吗?

这是我想做的类:(我还有 Parser 类和 Main 类,只有按钮和 XML 的 URL)

public class Pomocna extends ListActivity {

// All static variables
static String url =null;

// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_TITLE = "title";
static final String KEY_DATE = "pubDate";
static final String KEY_DESC = "encoded";

Calendar calendar = new GregorianCalendar();
int DSQ=calendar.get(Calendar.HOUR_OF_DAY);
int DMQ=calendar.get(Calendar.MINUTE);

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

    // Get XML values from previous intent
    url = in.getStringExtra("A");


    ArrayList<HashMap<String,String>> menuItems = new ArrayList<HashMap<String,String>>();
    //ArrayList<String[][]> nekaj = new ArrayList<String[][]>();


    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(url); //get XML
    Document doc = parser.getDomElement(xml); // get DOM elem.
    //doc.getDocumentElement().normalize();

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);

    //loop
    for (int i=0; i< nl.getLength(); i++){
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);

        //add to map
        map.put(KEY_TITLE, Vracanje1(parser.getValue(e, KEY_TITLE)));
        map.put(KEY_DATE, Vracanje2(parser.getValue(e, KEY_DATE)));
        map.put(KEY_DESC, parser.getValue3(e,KEY_DESC));

        //NEKO FRCERANJE -=- POCETAK

        String pvp = parser.getValue3(e,KEY_DESC);
        char[] rast = pvp.toCharArray();
        int brojac = 0;
        for(int q=0; q<pvp.length(); q++){
            if(rast[q]=='*') brojac++;
        }

        String[][] niz= new String[brojac][3];

        int bf1=0;
        int bf3=0;

        int oo=0;
        for(int q=0; q<pvp.length(); q++){
            if(rast[q]=='*'){
                bf3=bf1;
                bf1=q;

                String lol = pvp.substring(bf3, bf1);

                // SEPARATE STRING: LOL
                // IT MUST HAVE 3 PARTS: HOUR, MINUTE, AND DESCRIPTION

                if(oo==0){
                    String ps=lol.substring(0,2);
                    String ds=lol.substring(3,5);
                    String ts=lol.substring(6,lol.length());

                    niz[oo][0]=ps;
                    niz[oo][1]=ds;
                    niz[oo][2]=ts;  
                }
                if(oo>0){
                    String ps=lol.substring(1,3);
                    String ds=lol.substring(4,6);
                    String ts=lol.substring(7,lol.length());

                    niz[oo][0]=ps;
                    niz[oo][1]=ds;
                    niz[oo][2]=ts;
                }
                oo++;
            }
        }

        //NEKO FRCERANJE -=- KRAJ

        menuItems.add(map);
        //nekaj.add(niz);
    }


    //DISPLAY WHAT's CURRENTLY ON PROGRAM
    //USE TIME TO COMPARE AND SHOW



    ListAdapter adapter = new SimpleAdapter(this, menuItems, R.layout.list_item,
            new String[]{KEY_TITLE, KEY_DESC, KEY_DATE}, new int[]{
            R.id.title, R.id.description, R.id.date
    });
    setListAdapter(adapter);

    //singleView
    ListView lv = getListView();

}

public String Vracanje1(String bq){
    int p1=bq.length();
    int p2=p1-10;
    StringBuilder sbp= new StringBuilder(bq);
    sbp.delete(p2, p1);
    String ses=sbp.toString();

    return ses;
}
public String Vracanje2(String bq){
    int p1=bq.length();
    int p2=p1-14;
    StringBuilder sbp=new StringBuilder(bq);
    sbp.delete(p2, p1);
    String ses = sbp.toString();

    return ses;
}

}
4

2 回答 2

0

根据我的理解,任何电视节目应用程序都不能接受您的做法,因为通常程序有很多频道和很多节目,并且在 UI 线程中解析和分析数据(迟早)会导致 ANR。我建议您考虑使用单独的服务和内容提供者,让 UI 线程只做与 UI 相关的事情,并将数据处理留给相应的组件。通过提供程序中的 sqlite 查找/处理数据会更快、更容易。

关于查找最接近数据的问题 - 您可以对数组进行排序以及何时找到最接近的数据(例如,只是从头开始迭代)。

于 2012-08-16T09:53:51.640 回答
0

我同意@sandstar,但我不确定您要问的是如何过滤数据或如何显示数据?在这种情况下,更新ListAdapter. 这意味着,当您只想显示最近的节目时,您需要向适配器提供一个地图列表,其中包含带有最新节目数据的地图。这意味着您应该在将适配器应用到 ListView. 如果您想对适配器有更多的控制权,您可以考虑扩展ArrayAdapter它还允许您添加/清除现有适配器的数据。

于 2012-08-16T11:37:27.380 回答