은근한

Android post 연동 [php] httpclient 사용 본문

카테고리 없음

Android post 연동 [php] httpclient 사용

EsJoo 2014. 8. 5. 22:53

웹서버를 php로 하고 있기 때문에 php로 값을 넘겼다.

여러 웹서버를 조금씩 써봤는데 JSP나 php나 node나 보내는 방식은 똑같은것 같다.

다만 웹서버에서 어떻게 받는지에 따라 다를뿐?.. 이라고 생각이 든다.

post방식으로 보내는데 AysncTask를 쓰는 이유는 안드로이드에는 UI 를 총괄하는 메인Thread가 존재 한고

 있는데 메인Thread 외에는 일반Thread들이 안드로이드 UI 화면을 처리할 수 없습니다. 그렇기 때문에 메인

Thread와 일반Thread 를 잘 핸들링 해서 사용해야 하는데, 여간 번거로운 일이 아닙니다.

그렇기 때문에, Android 에서는 AsyncTask 라는 객체를 지원 한다고 하네요.. 그래서 썼습니다 ㅎㅎ


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class SendPost extends AsyncTask<Void, Void, String>{
 
@Override
    protected String doInBackground(Void... params) {
        // TODO Auto-generated method stub            
        String content = executeClient();
        if(content !=null){
            
        }        
        return content;
    }
    
 
    protected void onPostExecute(String result){
        //작업 마친후 내용
    }
    
    public String executeClient(){        
        try {
        HttpClient client = new DefaultHttpClient();
        String postURL = "http://000.000.000.000/test.php";
        HttpPost post = new HttpPost(postURL);
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        
        params.add(new BasicNameValuePair("name","joo"));
        params.add(new BasicNameValuePair("id""yeste"));
        //추가하고 싶으면 add를 써서 추가하면되고 
             //BasicNameValuePair은 key와 value로 되어 있어서 바로 위처럼 사용해주면된다.
        
        UrlEncodedFormEntity ent;
        
            ent = new UrlEncodedFormEntity(params,HTTP.UTF_8);
            post.setEntity(ent);
            HttpResponse responsePOST = client.execute(post);
            HttpEntity resEntity = responsePOST.getEntity();
                         //POST로 보낸 값들은 요청하여 확인작업
            if(resEntity !=null){
                Log.i("RESPONSE",EntityUtils.toString(resEntity));
                                     //보낸 값들을 로그를 찍어서 확인해준다.
            }
            
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
     }
        
        return null;
      }
}

혹여나 strictMode를 쓰셔야한다면

@Override
protected void onCreate(Bundle savedInstanceState){
if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads()
                .detectDiskWrites()
                .detectNetwork()
                .penaltyLog()
                .build());
    }


안드로이드 클래스 파일 내에서 OnCreate 바로 빨간부분을 복사해서 넣어주심 되겠네요.

전 SendPost라는 클래스파일로 따로만들어서 실행할 곳에서 객체를 생성후에 sendpost.execute(); 로 실행을 하고 있습니다.