나도 뉴스 앱을 만들어보자(2)~~

in #kr-dev8 years ago (edited)

안녕하세요!! @wonnieyoon입니다.
어제는 단순히 네이버 뉴스에서 제목(타이틀)만 가지고 와서 화면에 뿌려주기만 했었는데 오늘은 제목(타이틀)을 누르면 상세화면으로 넘어가는것까지 해서 앱을 완성시켜보겠습니다.


코드

<MainActivity.java>

public class MainActivity extends AppCompatActivity {

private ArrayList<NewsItem> arrayList;
private NewsAdapter adapter;
private ListView listView;

StringBuilder news_title ;
StringBuilder news_link ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    news_title = new StringBuilder();
    news_link = new StringBuilder();
    listView = (ListView)findViewById(R.id.list_view);
    arrayList = new ArrayList<NewsItem>();
    adapter = new NewsAdapter(this,R.layout.news_item,arrayList);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String link = ((NewsItem)adapter.getItem(i)).getLink();
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(link));
            startActivity(intent);

        }
    });

    NewsAsyncTask newsAsyncTask = new NewsAsyncTask();
    newsAsyncTask.execute();
}

/** -- 뉴스 크롤링 하기 - */
private class NewsAsyncTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected Void doInBackground(Void... params) {
        try {

            Document doc = Jsoup.connect("http://news.naver.com/main/hotissue/sectionList.nhn?mid=hot&sid1=101&cid=1074429").get();
            Element hotNews = doc.select("div.lnb_today").get(0);
            Elements news = hotNews.select("li");

            for(Element e : news){
                news_title.append( e.text().trim()).append("\n");
                news_link.append( e.getElementsByAttribute("href").attr("href")).append("\n");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        final StringTokenizer title = new StringTokenizer(news_title.toString(),"\n"); //뉴스 제목
        final StringTokenizer link = new StringTokenizer(news_link.toString(),"\n");   //뉴스 링크

        arrayList.clear(); // 리스트 초기화

        while(title.hasMoreTokens()) //\n 제거
        {
            String n_title = title.nextToken();
            String n_link = link.nextToken();
            arrayList.add(new NewsItem(n_title,n_link));
        }
        adapter.notifyDataSetChanged();
    }
}

}

어제 코드에 MainActivity.java 부분만 수정해주면 됩니다.


결과

<첫 실행화면>

<리스트중 하나를 클릭>

이상 포스팅을 마치겠습니다.

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.077
BTC 61257.99
ETH 1614.53
USDT 1.00
SBD 0.40