이 전에 포스팅을 했었지만, 직접 실행해 볼 수 있도록 외부 클라우드 서버로 연결했습니다.
우선 개념은 앞서 포스팅한 내용과 같습니다.
안드로이드에서 직접적으로 MySQL(Database)에 접속을 할 수 없습니다.
그렇기 때문에 중간에 PHP를 거쳐야 하는데, 이 PHP는 DB서버에 있든 또 다른 서버 PC에 있든
상관은 없습니다.
우선 안드로이드에서 PHP가 있는 서버쪽으로 접속을 해서 PHP파일을 실행합니다.
물론 네트워크를 사용하는 것이기 때문에 스레드를 사용하여야 합니다.
ANDROID CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class loginMysql extends Thread { public static boolean active=false; Handler mHandler; String userId=null,userPw=null,url=null; String login_url="http://answerofgod.honor.es/study/android/login/sql/chkid.php?id="; public loginMysql(String id,String pw){ mHandler=new Handler(); userId=id; userPw=pw; url=login_url+userId; } ....중략.... } | cs |
로그인 버튼을 눌렀을 때 들어오는 코드인데, Line 7이 php파일이 있는 위치입니다.
그리고 아이디와 패스워드 정보를 가져와 변수로 넣어줍니다.
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 31 32 | @Override public void run() { super.run(); if(active){ StringBuilder jsonHtml = new StringBuilder(); try { URL phpUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection)phpUrl.openConnection(); if ( conn != null ) { conn.setConnectTimeout(10000); conn.setUseCaches(false); if ( conn.getResponseCode() == HttpURLConnection.HTTP_OK ) { BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); while ( true ) { String line = br.readLine(); if ( line == null ) break; jsonHtml.append(line + "\n"); } br.close(); } conn.disconnect(); } } catch ( Exception e ) { e.printStackTrace(); } show(jsonHtml.toString()); } } | cs |
이 코드는 http로 윗부분의 url을 보내는 코드입니다.
Line 15~23 : url이 PHP파일이고, 이 PHP파일은 DB에 연결해 데이터를 쿼리하는 부분이기 때문에
쿼리해 온 데이터를 json으로 가져옵니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | void show(final String result){ mHandler.post(new Runnable(){ @Override public void run() { try { JSONObject jObject = new JSONObject(result); String getpw =jObject.get("PW").toString(); String getname=jObject.get("Name").toString(); Login.result_login(getpw, userPw, getname); } catch (JSONException e) { e.printStackTrace(); Login.result_login("false", "false", "false"); } } }); } | cs |
이 부분은 json으로 가져온 데이터를 파싱해서 변수로 전달해 주는 부분입니다.
그리하여 최종적으로 로그인하려는 ID와 PW가 일치하는지 확인한 후 로그인을 하게 됩니다.
PHP CODE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php $host='mysql.2freehosting.com'; $uname='u834678310_root'; $pwd='123456'; $db="u834678310_test"; $con = mysql_connect($host,$uname,$pwd) or die("connection failed"); mysql_select_db($db,$con) or die("db selection failed"); $id=$_GET['id']; $r=mysql_query("select PW,Name from User_Info where ID='$id'",$con); $row=mysql_fetch_array($r); print(json_encode($row)); mysql_close($con); ?> | cs |
이건 PHP 코드입니다.
Line 2~5 : DB에 접속하기 위한 정보들입니다.
Line 7~8 : Mysql 접속후 DB를 선택합니다.
Line 13~15 : Query를 한 후 변수에 저장합니다.
Line 17 : json형식으로 내보냅니다. 이부분이 android 코드에서 데이터를 저장하는 부분입니다.
실제 사용한 데이터 베이스 구조입니다.
그리고 실제 저장된 데이터 입니다.
앱 실행 장면입니다.
위 DB에 이미 저장되어있는 ID와 PW를 입력하면 login이 됩니다.
로그인이 완료되었습니다.
아직은 아무것도 없습니다^^
새로운 아이디로 로그인을 하고 싶다면 첫화면에서 register를 클릭합니다.
정보를 입력하시고 회원가입을 하면 가입한 아이디로 로그인이 가능합니다^^
추가(2017.03.17)
안드로이드용 소스코드와 PHP용 소스코드가 새롭게 업데이트 되었습니다.
제일 위 링크를 통해 다운로드 하세요^^
'Study > Android' 카테고리의 다른 글
static method 안에서 LayoutInflater 사용하기 (0) | 2016.08.12 |
---|---|
password 찾기 메일보내기 (43) | 2016.07.20 |
Floating Action Button, Snackbar (3) | 2016.03.09 |
SK thingplug test용 Android App (2) | 2016.01.15 |
현재 연결된 AP(WIFI) 정보가져오기 (4) | 2016.01.14 |