2017-12-16 13 views
0

jsoup 라이브러리를 사용하여 웹 사이트의 요소 객체를 만드는 클래스를 만들려고합니다.jsoup에서 클래스 이름을 사용하여 HTML 콘텐츠를 가져 오는 방법은 무엇입니까?

public class storyObj { 
public String title; 
public String preview; 
public String date; 
String url = "http//:davisclipper.com"; 
Bitmap bitmap; 

private class Title extends AsyncTask<Void, Void, Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      Document doc = Jsoup.connect(url).get(); 
      Elements storyTitle = doc.getElementsByClass("story_item_title"); 
      title = storyTitle.attr("content"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

public String getTitle(){ 
    return title; 
} 

을 내 주요 활동에서 내가 반환 제목 얻을 수있는 텍스트 뷰를 설정 :

storyObj story = new storyObj(); 
String text = story.getTitle(); 

TextView title = (TextView) findViewById(R.id.main_title); 
title.setText(text); 

내가 할 모든 빈 문자열을
설명서를 읽은 후,이 내가 가진 것입니다.

+0

URL이 잘못 되었습니까? 이 웹 사이트가 Javascript에 의해 동적으로 생성되지 않았습니까? 그렇다면 Jsoup는 잘못된 라이브러리입니다 –

답변

1

스레드가 작동하는 방식을 오해하는 것 같습니다. Jsoup는 백그라운드에서 발생합니다. 그 동안 텍스트를 설정하는 주 스레드에서 작업을 계속할 수 있습니다.

비동기 작업을 작업으로 옮겨야합니다.

그리고 당신은 title.setText(text);

또한이 웹 사이트 동적되지 않는 이상

this.title = (TextView) findViewById(R.id.main_title); 

new AsyncTask<Void, Void, String>() { 
    @Override 
    protected String doInBackground(Void... params) { 
     try { 
      Document doc = Jsoup.connect(url).get(); 
      Elements storyTitle = doc.getElementsByClass("story_item_title"); 
      return storyTitle.attr("content"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
    @Override 
    public void onPostExecute(String content) { 
     MainActivity.this.title.setText(content); 
    } 
}.execute(); 

마찬가지로 doInBackground return title

을해야합니다 당신은 어디 그것을 위해 onPostExecute를 구현해야 Javascript에 의해 생성 된 Jsoup는 잘못된 라이브러리입니다. 그래도 현지인 뉴스 사이트가 고급인지 확실하지 않습니다.

+0

도움을 주셔서 감사합니다. 다른 옵션을 살펴 봐야 할 것입니다. – dginos3

+0

이것이 효과가 있습니다. 시도해 보셨나요? –