본문 바로가기
개발/APP

안드로이드 앱에서 웹뷰로 데이터 전송

by 카루딘 2018. 10. 10.
반응형


출처: http://hiege.tistory.com/246


안드로이드 앱에서 웹뷰로 데이터 전송

클라이언트인 안드로이드 앱에서 데이터를 서버로 전송할때 

안드로이드 웹뷰를 이용하면 간단하게 전송할 수 있다.



1) Main Activity -> WebView Activity


우선 클라이언트 앱에서 서버에 보낼 값을 웹뷰가 실행될 Activity에 전송한다.


Main Activity


 TextView id = (TextView)findViewById(R.id.id); //TextVeiw 생성

i = new Intent(this, WebView.class); //WebView Activity를 실행할 Intent

i.putExtra("id", id.getText().toString); // Intent에 EditText에 입력된 값을 전달



WebView Activity


Intent i = getIntent();

String id = i.getStringExtra("id"); //MainActivity에서 보낸 값을 id에 저장


WebView web = (WebView)findViewById(R.id.webview01); //WebView 생성

web.getSettings().setJavaScriptEnabled(true); //WebView 자바스크립트 true


web.loadUrl("http://ip주소:8080/MyServer/member_join.jsp?id="+id); 

//get방식으로 id값 웹서버에 전달


web.setVisibility(web.GONE);

finish();

//웹뷰를 보이지않게하고 값만 웹서버에 전달한다음 Activity를 종료해서 보여줄 필요없는 

WebViewActivity를 화면에 나타나지 않게 한다.



*AndroidManifest.xml

 <activity  android:name=".WebView" /> //웹뷰 액티비티 추가

<uses-permission android:name="android.permission.INTERNET"/> //퍼미션 추가



2) WebViewActivity -> 웹서버 -> DB


웹뷰를 통해 전달한 값을 웹서버 페이지에서 받아서 DB에 접속한다.

근데 오라클만 쓰다 간만에 MySQL로 DB접속하려니 역시나 접속이 안되신다.. 웹서버 프로젝트 파일

에 mysql-connector-java-5.1.20-bin.jar 라이브러리에 추가하고..톰캣껏다 켰다..그리고 

Class.forName("com.mysql.jdbc.Driver); 이걸로 JDBC 드라이버를 로딩하는 순간 이미 깊은 삽질의 시간으로 들어갔는데..

JDBC 드라이버가 jar파일일때는 Class.forName("org.gjt.mm.mysql.Driver"); 이렇게 쓴다



WebServer.jsp


<%

request.setCharacterEncoding("euc-kr");//파라미터값을 한글로 인코딩

String id = request.getParameter("id"); //파라미터값 id를 id에 저장

Class.forName("org.gjt.mm.mysql.Driver"); // 드라이버 로딩

Connection conn = null; //커넥션 생성

PreparedStatement pstmt = null;//PreparedStatement 생성


try{

String jdbcDriver =  "jdbc:mysql://localhost:3306/데이터베이스이름?useUnicode=true&charaterEncoding=euc-kr";

String dbuser = "root";

String dbpass = "DBpassword";


String sql = "insert into 테이블 values(?)";


conn = DriverManager.getConnection(jdbcDriver, dbuser, dbpass);  //DB 커넥션 생성

pstmt = conn.prepareStatement(sql); //PreparedStatement 생성


pstmt.setString(1,new String((id).getBytes("8859_1"),"utf-8"); 

//8859_1타입으로 읽은 값을 utf-8로 재해석해야지만 한글안깨지고 DB에 들어간다


pstmt.executeUpdate(); //쿼리실행


}}finally{

 if(pstmt != null)try{pstmt.close();}catch(SQLException ex){}

 if(conn != null)try{conn.close();}catch(SQLException ex){}

}


%>

posted by 소창다명 보헤미안22


반응형