【问题标题】:Get Next Jsoup Element with Same Name Android获取具有相同名称 Android 的下一个 Jsoup 元素
【发布时间】:2013-09-27 02:23:51
【问题描述】:

我正在使用 Jsoup 检索 Android 中的元素。我需要从此代码中获取下一个 eta 元素。我不知道该怎么做。我正在从以下位置检索 xml:http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=201412abc85d49b2b83f907f9e329eaa&mapid=40380。有人提出使用 elem.iterator(),但我不知道如何将其放入我的代码中(这是它的网站)http://www.jsoup.org/apidocs/org/jsoup/select/Elements.html#iterator()我的代码如下。

TestStation.java

public class TestStation extends Activity {
String URL = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=201412abc85d49b2b83f907f9e329eaa&mapid=40380";
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.test_station);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy); 



Document doc = null;

TextView tv = (TextView) findViewById(R.id.tv);
TextView tv1 = (TextView) findViewById(R.id.tv1);
TextView tv2 = (TextView) findViewById(R.id.tv2);
TextView tv3 = (TextView) findViewById(R.id.tv3);
TextView tv4 = (TextView) findViewById(R.id.tv4);
TextView tv5 = (TextView) findViewById(R.id.tv5);

try {
    doc = Jsoup.connect(URL).userAgent("Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10").get();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
    Iterator<Element> iterator = elem.iterator();
while(iterator.hasNext())
{ Element div = iterator.next();

Elements arrT = div.select("arrT");
Elements prdt = div.select("prdt");
Elements staNm = div.select("staNm");
String StaNm = staNm.text();
tv1.setText(String.valueOf (StaNm));


while(iterator.hasNext())
{ Element div1 = iterator.next();

Elements arrT1 = div1.select("arrT");
Elements prdt1 = div1.select("prdt");
Elements staNm1 = div1.select("staNm");
String StaNm1 = staNm1.text();
tv2.setText(String.valueOf (StaNm1));



try {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
    Date date1 = sdf.parse(arrT.text());
    Date date2 = sdf.parse(prdt.text());
    Date date3 = sdf.parse(arrT1.text());
    Date date4 = sdf.parse(prdt1.text());

    long dateDiff = (date1.getTime() - date2.getTime())>0 ? (date1.getTime() - date2.getTime()) :(date2.getTime() - date1.getTime());
    long dateDiff1 = (date3.getTime() - date4.getTime())>0 ? (date3.getTime() - date4.getTime()) :(date4.getTime() - date3.getTime());
    SimpleDateFormat sdf1 = new SimpleDateFormat("mm:00");
    String dateDif = sdf1.format(dateDiff);
    String dateDif1 = sdf1.format(dateDiff1);
    tv.setText(String.valueOf (dateDif));
    tv3.setText(String.valueOf (dateDif1));


    }

catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();



 }

}
}
}

我现在收到 LogCat 错误,它说它已停止工作:

09-26 20:34:50.456: E/AndroidRuntime(22691): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dev.chicagotraintracker/com.dev.chicagotraintracker.TestStation}: java.lang.NullPointerException
09-26 20:34:50.456: E/AndroidRuntime(22691):    at com.dev.chicagotraintracker.TestStation.onCreate(TestStation.java:57)

使用我的代码,我得到了两个元素,但它们完全相同。我得到 dateDiff 和 dateDiff1 相同的数字。如何获得下一个具有相同名称的 eta 元素?感谢您的帮助。

【问题讨论】:

  • 我看到的代码根本没有意义。考虑重新表述您的问题。
  • 我的减法,你的意思是像这样的数学减法:20130921 17:32:24 - 20130921 17:16:24?您有多个 条目,每个条目都包含 arrT 和 prdt,您想为每个条目执行此操作吗?
  • 是的,我想从数学上减去 17:32:24 和 17:16:24 的时间部分。我想为每个条目都这样做。
  • @Alécio 有了while(iterator.hasNext()),即使没有下一个元素,它还会运行代码吗?

标签: java android jsoup next


【解决方案1】:

所以如果我理解正确,这可能会对你有所帮助:

Elements elem = doc.select("eta");
Iterator<Element> iterator = elem.iterator();
while(iterator.hasNext()) {
    Element etaElement = iterator.next();
    Element arrT = etaElement.select("arrT");    
    Element prdt = etaElement.select("prdt");
    //  1. parse the arrT value
    //  2. parse the prdt value
    //  3. subtract them.
}

这样,您将能够单独处理每个条目。请注意,div.select 用于每个 eta 元素,而不是整个文档,就像您的代码所做的那样。

【讨论】:

  • 这有帮助,但我怎样才能从物理上减去它们呢?我应该在我的代码中添加什么来减去这两者?
  • 这取决于类型,您必须使用 SimpleDateFormat 定义模式,以便它可以将文本解析为 Date 对象,并且您可以使用 Date 对象在数学上减去这些值。 ..它并不复杂,只需要几行...见这篇文章:stackoverflow.com/questions/11446420/parse-string-to-date-java
  • 如何前进到下一个 eta 元素?我再次获得了代码,并且更改了所有变量,但它显示的数字相同。 @Hi-Tech Android KitKat
  • 如何前进到下一个 eta 元素?我再次获得了代码,并且更改了所有变量,但它显示的数字相同。 @Alecio
  • @hichris123 尝试使用 elem.iterator() (elem => Elements) 然后你可以在迭代器上运行循环。 jsoup.org/apidocs/org/jsoup/select/Elements.html#iterator()
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多