2013-09-21 3 views
1

Jsoup를 사용하여 Android에서 요소를 다시 검색하고 있습니다. 이 코드에서 다음 eta 요소를 가져와야합니다. 어떻게해야할지 모르겠다. 나는 xml을 retreiving from : 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() 내 코드는 아래에 있습니다.같은 이름의 다음 Jsoup 요소 가져 오기

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(); 



} 

} 
} 
} 

지금 로그 캣 오류를 받고 있어요, 그리고 그것의 작동이 중지되었습니다 말한다 : 나는 두 가지 요소를 얻을 수 있지만, 그들이 내 코드와 함께

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에 대해 같은 숫자를 얻는다. 어떻게 같은 이름의 다음 에타 요소를 얻을 수 있습니까? 도와 줘서 고마워.

+1

내가 본 코드는 전혀 이해가되지 않습니다. 당신의 질문에 대해 다시 생각해보십시오. –

+0

내 빼기, 당신은 같은 수학적 뺄셈을 의미합니까 : 20130921 17:32:24 - 20130921 17:16:24? 의 여러 항목이 있습니다. 각 항목에는 arrT와 prdt가 들어 있습니다. 각 항목에 대해이 작업을 수행 하시겠습니까? –

+0

네, 저는 17:32:24와 17:16:24의 시간 부분을 수학적으로 뺍니다. 나는 각 입장을 위해 그것을하고 싶을. – hichris123

답변

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 요소에 사용 중이며 전체 문서에서 사용되지는 않습니다.

+0

이 방법이 도움이됩니다. 그러나 어떻게 실제로 빼기를 할 수 있습니까? 두 코드를 뺄 때 코드에 무엇을 넣어야합니까? – hichris123

+0

타입에 따라 다르므로 패턴을 정의하는 SimpleDateFormat을 사용하여 일부 작업을 수행해야하므로 텍스트를 Date 객체로 파싱 할 수 있으며 Date 객체를 사용하면 수학적으로 값을 뺄 수 있습니다. 복잡하지 않고 몇 줄 걸립니다 ...이 게시물을 참조하십시오 : http://stackoverflow.com/questions/11446420/parse-string-to-date-java –

+0

다음 eta 요소로 어떻게 진행할 수 있습니까? 코드를 다시 작성하고 모든 변수를 변경했지만 동일한 번호를 표시합니다. @ Hi-Tech Android KitKat – hichris123

관련 문제