물에 살고싶은 개발자

안드로이드 <-> PHP 연동 예제 + 설명 본문

Android

안드로이드 <-> PHP 연동 예제 + 설명

돼지사랑 2017. 8. 17. 20:50

일단 원론적인 얘기는 슥 스킵하고,


코드로 예를 들어 설명을 해두겠다.


테스트를 위해 아주 간단한 php 코드


<?php
$test = $_GET['id'];
$test = $test . "test_ok";
echo $test;


단순히 이렇게만 했다


그럼 클라이언트에서 Get으로 보낸 값 뒤에 test_ok가 웹에 출력된다

(브라우저를 키고 주소에 url?id=연동 이라고 쳐보면 페이지에 연동test_ok라고 뜬다) 


기본적으로 안드로이드와 php의 연동은 php의 echo를 통해 결과값을 받는것이다.


그럼 이제 안드로이드 코드를 보자 


접속하는 부분

PhpTest task = new PhpTest();
task.execute("http://서버 url/test.php?id=테스트 ㅇㅋ? / ");


실제 연동코드

private class PhpTest extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... params) {
String output = "";
try {
//연결 url 설정
URL url = new URL(params[0]);

//커넥션 객체 생성
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()));
int i = 0 ;
for(;;){
//웹상에 보이는 텍스트를 라인단위로 읽어 저장
String line = br.readLine();
if(line == null) {
System.out.println("그만! -> " + i);
break;
}
System.out.println("성공ㅇㅇ -> "+line);
i++;
output += line;
}
br.close();
}
conn.disconnect();
}else{
System.out.println("실패ㅡㅡ");
}
}catch (Exception e){
e.printStackTrace();
}

return output;
}
}


이렇게 해주면 되겠다.

주석만 보고도 이해하는 사람이 있겠다만...

조금만 뜯어보자

AsyncTask를 쓰는 이유는 따로 알아보시고 ㅇㅇ


연결되는 부분은 크게 의문이 들지 않을것이라고 생각한다

(url.openConnection에서 문을 열고 conn.getResponseCode()에서 결과를 받아온다고 생각하면됨)


제대로 연결이 됐고, (웹에 echo로 출력된)결과값을 받아왔다면 for문안에서 line에 한줄씩 들어간다.

그걸 output에 담아서 돌려주는것이다.


사실 조금만 생각하면 알수있지만 생각보다 쉽게 감을 못잡을지도 모른다는 생각에 일단 글을 남겨본다


아 그리고 하나 추가하자면

저렇게 리턴시킨 output을 받아오는 방법은


test = task.execute("http://서버 url/test.php?id=테스트 ㅇㅋ? / ").get();


요렇게 해주면 된다(test는 String이다)


끘!

Comments