안드로이드 서버 php 통신(간단히)
- 공유 링크 만들기
- 이메일
- 기타 앱
안드로이드 서버 php 통신(간단히)
안드로이드가 웹과 통신을 하기 위해선 아래 두가지가 필요하다.
1. 웹 서버 (php)
2. 인터넷 연결이 가능한 안드로이드 단말기 or 안드로이드 시뮬레이터
우리는 안드로이드 단말에서 정말 간단한 php 문을 호출할 생각이다.(나중에 응용가능하게)
웹 서버 같은경우에 apm 이나 wpn-xm 등을 설치해서 구축할수 있다.
설치방법은 구글신에게 물어보자.
php 코드 부분
먼저
값을 주고 받을 php 를 만든다.
아래는 아주 간단히 값을 받고 값을 전달하는 php문이다.
php 파일 이름은 phpTest.php 이다. 텍스트 편집기로 파일을 만들고 저장하자.
필자는 notpad++을 사용했다.
post 방식으로 각각 name, age, sex 라는 변수를 받아와
출력하는 간단한 php 입니다.
해당 php 파일을 자신의 서버에 올립시다.
아래 제가 생각하는 php에 대한 간단한 생각들.
php 통신
-보내주는건 많이 보내줄수있는듯 get 방식이든 post 방식이든 get방식같은경우에 글자수가 제한이 있고 주소창에서 입력이 가능하므로 결국엔 post 방식으로 보내주는게 안전할듯.
받을때는 echo 로 출력된 정보를 받는다고 생각하면 편할거같음. 받는 데이터 같은경우에 웹에있는 데이터를 받는다고 생각됨.
여러개의 데이터를 전송받기 위해서는 echo 에서 구분자를 이용한 방법이나 결국 json 형식으로 받는 수 밖에 없음(아님 xml)
결국 결론은 안드로이드 단말에서 php 서버에 보낼수 있는 변수들은 무제한이고, 받을수 있는 값들은 php 문에 출력되는 echo 문들 이다.
결국 이렇기 때문에 많은 데이터를 받을때는(mysql 사용등) json 형식같은 것을 사용해서 php 값들받게 되는것 같다.
안드로이드 코드부분
우리가 만들 안드로이드 코드는
버튼을 누르면 php 웹에 접속해서 원하는 값을 받는 코드입니다.
제일 먼저 해야될것은 AndroidMainfest에 인터넷이 가능하도록 퍼미션을 설정하는 것입니다.
그리고 active_main.xml 에서 버튼과 텍스트 뷰를 추가합니다.
허니콤이후로 네트워크 접속시 별도의 스레드를 돌려야 오류가 나지 않습니다.
AsyncTask를 사용합니다.
urlpath 에는 자기가 접속할 php 주소를 입력합니다.
onCreate 함수(엑티비티가 처음 시작할때 무조건 실행되는 함수)에서
버튼과 텍스트뷰를 찾고 버튼을 클릭했을시에 HttpTask를 실행합니다.(AsyncTask)
bn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
new HttpTask().execute();
}
});
아래는 AsyncTask 입니다. 세번째 인자의 String를 입력했는데 이 값은
doInBackground의 반환값이며, onPostExecute의 매개변수가 됩니다.
doInBackground의 반환값이 onPostExcute의 인자로 전달된다고 생각하면 될것 같습니다.
자세한 내용은 AsyncTask로 검색하면 나올것입니다.
php 상에서 post 값으로 받기 때문에 HttpPost 로 선언해주고
넘길 값들을 Vector 에 저장한후 웹으로 보내줍니다.
onPostExcute 에서 텍스트뷰를 변경해줍니다. onPostExcute는 doinBackground 가 실행된후 실행되는 함수이며,
안드로이드 메인 ui 같은경우에는 여기서 변경해주어야 에러가 나지 않습니다.
public class MainActivity extends Activity {
Button bn;
TextView result;
//접속할주소
private final String urlPath = "";
private final String TAG = "PHPTEST";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bn = (Button)findViewById(R.id.btn);
result = (TextView)findViewById(R.id._result);
bn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new HttpTask().execute();
}
});
}
class HttpTask extends AsyncTask{
@Override
protected String doInBackground(Void... voids) {
// TODO Auto-generated method stub
try{
HttpPost request = new HttpPost(urlPath);
//전달할 인자들
Vector nameValue = new Vector();
nameValue.add(new BasicNameValuePair("name", "홍길동"));
nameValue.add(new BasicNameValuePair("age", "24"));
nameValue.add(new BasicNameValuePair("sex", "male"));
//웹 접속 - utf-8 방식으로
HttpEntity enty = new UrlEncodedFormEntity(nameValue, HTTP.UTF_8);
request.setEntity(enty);
HttpClient client = new DefaultHttpClient();
HttpResponse res = client.execute(request);
//웹 서버에서 값받기
HttpEntity entityResponse = res.getEntity();
InputStream im = entityResponse.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(im, HTTP.UTF_8));
String total = "";
String tmp = "";
//버퍼에있는거 전부 더해주기
//readLine -> 파일내용을 줄 단위로 읽기
while((tmp = reader.readLine())!= null)
{
if(tmp != null)
{
total += tmp;
}
}
im.close();
//결과창뿌려주기 - ui 변경시 에러
//result.setText(total);
return total;
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
//오류시 null 반환
return null;
}
//asyonTask 3번째 인자와 일치 매개변수값 -> doInBackground 리턴값이 전달됨
//AsynoTask 는 preExcute - doInBackground - postExecute 순으로 자동으로 실행됩니다.
//ui는 여기서 변경
protected void onPostExecute(String value){
super.onPostExecute(value);
result.setText(value);
}
}
}
from http://hyunity3d.tistory.com/513 by ccl(A) rewrite - 2020-03-06 11:54:12
- 공유 링크 만들기
- 이메일
- 기타 앱
댓글
댓글 쓰기