나도 뉴스 앱을 만들어보자(2)~~
안녕하세요!! @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 부분만 수정해주면 됩니다.
결과
<첫 실행화면>
<리스트중 하나를 클릭>
이상 포스팅을 마치겠습니다.