스마트기기개발관련/안드로이드 개발

android 안드로이드 WebView: html 띄우기/파싱 html 코드보기,가져오기 예제 관련

AlrepondTech 2013. 7. 8. 17:52
반응형

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: 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();
    }
}

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://ygchorom.tistory.com/entry/Android-Webview-%EC%9D%98-html-source-%EC%BD%94%EB%93%9C-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0

 

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

 

WebView나 모바일 브라우저와 같은곳에서 로그인 하고난 뒤
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

 

**html 태그를 webView로 띄우기 예제
WebView web = (WebView)findViewById(R.id.web);
String summary = "<]meta http-equiv='Content-Type' content='text/html; charset=utf-16le'>" +
         "<]html>" +
         "<]body>" +
         "<]marquee>자 빨리하고 끝내자 " +
         "<]/body>" +
         "<]/html>";
web.loadData(summary, "text/html", "UTF-8");
참고로 한글은 meta 데이터를 적용해야 정상적으로 뜹니다.
 
**html 파싱 예제
TextView textView = (TextView) findViewById(R.id.txt);
URL url=null;
try {
         url = new URL("http://family7914.cafe24.com");
         HttpURLConnection http = (HttpURLConnection)url.openConnection();  
         BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream()));  
         StringBuffer buffer = new StringBuffer();  
         int c;  
         while((c=in.read()) != -1){  
          buffer.append((char)c);  
         }  
         //textView.setText(buffer);
         String[] bufferArray=buffer.toString().split("\n");  
         String result = bufferArray[2];   //필요한 부분만 따로 뺌
         String key = bufferArray[2].substring(result.indexOf("//앞의 태그  
 //안의 텍스트  Team Hush -> Team Hush
         String value = bufferArray[2].substring(8, result.indexOf("
         textView.setText("result : "+result+"\nkey : "+key+"\nvalue : "+value);
} catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
}
 
html 파싱 참고 사이트 :http://lyb1495.tistory.com/16

[출처] 

//----------------

 

 

 

=================================

=================================

=================================

 

 

 

반응형