티스토리 뷰
melon site 에 접속해서 금주의 음악 순위를 긁어오는 간단한 programming 을 해보자.
<uses-permission>
먼저 app 이 network 를 사용할 수 있도록 permission 을 주는 과정이 필요하다. AndroidManifest.xml 에서 아래 내용을 추가해 주자.
<uses-permission android:name="android.permission.INTERNET">
</uses-permission>
아래처럼<application> 바로 전에 <application> 과 같은 level 로 추가
<uses-permission android:name="android.permission.INTERNET"> <application android:label="@string/app_name"> |
android.os.NetworkOnMainThreadException
간단하게 만들려고 MainActivity 에서 site 접속을 했는데, 자꾸 exception 이 발생했다. 뭔가 잘못되었나 하고 찾아봤더니, 단순히 Main thread 에서 네트워크 접속 등을 하지 못하게 하려고 exception 을 발생시키도록 해 놓았다. MainActivity 에서 network 등을 이용하면 폰이 정지하는 듯 한 모습을 줄 수 있다는 것이다.
이것을 StrictMode 를 조정해서 끌 수도 있지만, 여하튼 말을 듣는 게 좋은 듯 하여 AsyncTask 를 사용해서 접속하게 만들었다.
(참고: http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception)
scanner.match() 사용 못함 –> StringBuilder() 사용
GET 을 이용해서 얻어온 site의 html 내용을 그대로 사용해 보고자, InputStream 상태로 바로 사용 해 보려 시도했다. 그래서 찾아보다가 Scanner를 사용했는데, 이게 또 말썽이다.
Scanner 를 이용해서 아래처럼 pattern 을 만족시키는 녀석을 찾아보려 했으나, scanner.match().group(2) 를 부를 때 memory allocation 을 너무나 오래 하고 있었다. 아마도 무지막지하게 memory를 사용하는 듯 하다. 여하튼 자세한 이유는 모르겠으나, 그래서 그냥 InputStream 을 String 으로 변환해서 처리했다.
Scanner scanner = new Scanner(in, "UTF-8");
String match = "";
while (match != null) {
match = scanner.findWithinHorizon(p, 0); // 0 means infinite
if (match != null) {
String href = scanner.match().group(2);
list.add(href);
}
}
continue….
Other References
- android StrictMode http://developer.android.com/reference/android/os/StrictMode.html
- Total
- Today
- Yesterday
- 미스터피자주문
- 샤워기전
- 스타치
- 칠오름
- icon program
- 편집프로그램
- 제주녹색농원
- 무릎마사지
- 대일농장
- 영귤
- 늙기
- network error
- breakpoint
- 상식
- 그림편집
- 제주영귤
- 데크에 바인딩묶기
- icon tool
- 인공눈
- 녹색농원
- 영귤차
- 인테리어
- 인공안구
- 고강도
- 보드고글
- 칠오름농장
- sudachi
- 명언
- 과학
- 의학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |