=================================
=================================
=================================
출처: http://www.androidpub.com/455820
public class ChangwonBus extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.down);
btn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
String html;
html = DownloadHtml("http://www.google.com");
EditText result = (EditText)findViewById(R.id.result);
result.setText(html);
}
});
}
String DownloadHtml(String addr){
StringBuilder html = new StringBuilder();
try{
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if(conn != null){
conn.setConnectTimeout(10000);
conn.setUseCaches(false);
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
for (;;){
String line = br.readLine();
if(line == null) break;
html.append(line + '\n');
}
br.close();
}
conn.disconnect();
}
}
catch(Exception ex){;}
return html.toString();
}
}
=================================
=================================
=================================
Android 에서 Webview 를 이용한 app을 만들다 보면 Webview의 html source를 봐야 하는 경우가 생긴다.
예를 들어 webview에 특정 페이지가 출려되어야 하나 오류도 발생하지 않고 white page가 뜬다.. 모바일 웹페이지이나 다른 브라우져에서는 전혀 문제가 없다. 보통 브라우져 종속적인 쿠키나 javascript 오류로 페이지가 출력되지 않는 경우가 대부분이나 이런경우 해당 페이지의 html source 를 보기전에 확인하기가 힘들다. 물론 이보다 더 스마트한 방법이 있을수 있겠지만..... 이보다 더좋은 스마트 한 방법을 알고 있지 않다면 아래 방법이라도....
먼저 WebViewClient 상속 클래스에 아래 메소드를 오버라이딩 한다.
페이지 로드가 완료 됬을 시에 print 라는 javascript를 호출한다 그 인자에 html 소스를 넘긴다. ..
1: @Override
2:
3: public void onPageFinished(WebView view, String url) {
4:
5: // TODO Auto-generated method stub
6:
7: super.onPageFinished(view, url);
8:
9:
10:
11: Log.i("INFO","onPageFinished url="+url);
12:
13: String ht = "javascript:window.TMP.print(document.getElementsByTagName('html')[0].innerHTML);";
14:
15: view.loadUrl(ht);
16:
17: }
18:
19:
호출된 메소드를 오버라이딩 받기 위해 JavaScriptInterface 클래스에 아래 메소드를 추가 한다.
1: /**
2: * Webview Html 소스 보기
3: * */
4:
5: @SuppressWarnings("unused")
6: public void print(String data) {
7: File file = new File(TFileUtil.DIR_TMP+"/aa.html");
8: FileOutputStream fos;
9:
10: try{
11: if(file.exists()){
12: fos = new FileOutputStream(file, true);
13: }else{
14: fos = new FileOutputStream(file);
15: }
16: fos.write(data.getBytes());
17: fos.close();
18: }catch (Exception e) {
19: Log.e("INFO","print exception "+e.getMessage());
20: }
21: }
22:
23:
이렇게 해서 html 소스를 파일로 저장 할수 있다 ....
위 코드에 대해 이해가 가지 않는다면 JavaScriptInterface 클래스에 대해 먼저 확인해보라~~~..
=================================
=================================
=================================
츌처: http://cafe.naver.com/javacircle/72864
java.net.url 클래스의 openStream 매소드
즉, url.openStream() 이런 방식으로 html 소스를 불러오면 로그인 안된 상태의 페이지가 다운받아집니다...
인터넷을 찾아보니 쿠키 동기화 문제도 있고 해서 쿠키 동기화를 해봐도 안되네요..
혹시 이러한 문제 경험하신분 있으세요? 해결방법좀 알려주세요 ...
밑에는 코드입니다
String url 의 빨간색 부분에 제 아이디를 넣어서 할 경우 웹뷰에서는 로그인이 되어있지만
URL 클래스로 받은 HTML 소스는 로그인이 안 되어있는 상태의 소스가 받아집니다...
public class LoginTestActivity extends Activity {
private WebView webview;
private TextView textview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView)findViewById(R.id.webview);
textview = (TextView)findViewById(R.id.textview);
webview.setWebViewClient(new MyWebClient());
webview.setWebChromeClient(new WebChromeClient());
WebSettings set = webview.getSettings();
set.setJavaScriptEnabled(true);
set.setBuiltInZoomControls(true);
set.setPluginsEnabled(true);
set.setJavaScriptCanOpenWindowsAutomatically(true);
String url = "https://portal.korea.ac.kr/s_exLogin.jsp?returnURL=dormitel.korea.ac.kr/pub/process/potal_login.php&username=username&password=passwd";
webview.loadUrl(url);
String check_html = HtmlToString("http://dormitel.korea.ac.kr/pub/board/bbs_free.html?cboardID=part060301&page=1");
if(check_html.indexOf("'/img/com/login_btn_login_ov.gif',1)") != -1) check_html = "failed";
else check_html = "success";
textview.setText(check_html);
}
class MyWebClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
String HtmlToString(String addr) {
StringBuilder sbHtml = new StringBuilder();
try {
URL url = new URL(addr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
if (conn != null) {
conn.setConnectTimeout(10000);
conn.setUseCaches(true);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "EUC-KR"));
for (;;) {
String line = br.readLine();
if (line == null)
break;
sbHtml.append(line + "\n");
}
br.close();
}
conn.disconnect();
}
} catch (Exception e) {}
return sbHtml.toString();
}
}
=================================
=================================
=================================
출처: http://blog.naver.com/PostView.nhn?blogId=aiger&logNo=100116566525
//----------------
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 AlertDialog 상속하여 커스텀 팝업창을 만들때 창이외에 터치를 해도 창이 안사라지게 하는방법 또는 이벤트 (0) | 2013.07.24 |
---|---|
안드로이드 AlertDialog 다이얼로그 클래스 크기, 이동 설정 관련 (1) | 2013.07.11 |
안드로이드 AndroidManifest.xml 의 activity 또는 xml 경로 생략 관련 (0) | 2013.06.20 |
안드로이드 이동키로 포커스를 이동할때 webview 에서 web 안의 포커스가 나와서 다음 뷰어의 포커스로 넘어 가지 않을때 그나마 나은 대처방법 관련 (0) | 2013.06.18 |
안드로이드 네트워크 패킷 리시브(recv) 또는 이벤트 관련 post,또는 딜레이 처리 팁 (0) | 2013.06.13 |