상세 컨텐츠

본문 제목

안드로이드 android [Tip&Tech] 8. Http Post 방식으로 웹서버와 자료를 주고받는 예제

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2016. 4. 7. 10:13

본문

반응형

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidside.com/bbs/board.php?bo_table=421&wr_id=137

 

 

다음 프로그램은 http://korea-com.org/foxmann/lesson01.php 와 자료를 주고받는 예제이다. 

[주의 사항] 
1. http://korea-com.org/foxmann/lesson01.php 는 실습을 위해 임시로 만든 페이지이므로 언제든지 내 맘대로 삭제해 버릴 수 있다. 
2. 위의 사이트를 해킹하는 행위는 형사 처벌을 받게 되므로 주의해야 한다. 
3. 해킹 시도시 접속자의 ip를 추적해서 사용자의 컴퓨터를 포맷해 버리는 악랄한(?) 프로텍트를 사용하고 있으므로 특히 주의한다. 

실행 결과 : 페이지1로 전송하고 페이지2로 결과 받음 

        

 

main.xml 


<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
     xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@android:id/tabhost"  
      android:layout_width="fill_parent"  
      android:layout_height="fill_parent"> 

      <LinearLayout  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            android:orientation="vertical">  

           <TabWidget  
                 android:id="@android:id/tabs"  
                 android:layout_width="fill_parent"  
                 android:layout_height="wrap_content"/> 

           <TextView 
                 android:layout_width="wrap_content"  
                 android:layout_height="wrap_content"/> 
           <FrameLayout  
                 android:id="@android:id/tabcontent"  
                 android:layout_width="fill_parent"  
                 android:layout_height="fill_parent"> 

            <TableLayout  
                  android:id="@+id/page01"  
                  android:layout_width="fill_parent"  
                  android:layout_height="wrap_content"  
                  android:stretchColumns="1"> 

             <TableRow> 
                   <TextView  
                         android:layout_width="wrap_content"  
                         android:layout_height="wrap_content" 
                         android:text="ID :"/> 
                   <EditText  
                          android:id="@+id/edit_Id"  
                          android:layout_width="fill_parent"  
                          android:layout_height="wrap_content"/> 
             </TableRow> 
             <TableRow> 
                   <TextView  
                         android:layout_width="wrap_content"  
                         android:layout_height="wrap_content"  
                         android:text="PWord : "/> 
                    <EditText  
                          android:id="@+id/edit_pword"  
                          android:layout_width="fill_parent"  
                          android:layout_height="wrap_content"  
                          android:password="true"/> 
             </TableRow> 
             <TableRow> 
                   <TextView  
                         android:layout_width="wrap_content"  
                         android:layout_height="wrap_content"  
                         android:text="개념 : "/> 
                    <EditText  
                          android:id="@+id/edit_title"  
                          android:layout_width="fill_parent"  
                          android:layout_height="wrap_content"/> 
             </TableRow> 
             <TableRow> 
                   <TextView  
                         android:layout_width="wrap_content"  
                         android:layout_height="wrap_content"  
                         android:text="대책 : "/> 
                    <EditText  
                          android:id="@+id/edit_subject"  
                          android:layout_width="fill_parent"  
                          android:layout_height="wrap_content"  
                          android:lines="4"/> 
             </TableRow> 
             <View  
                   android:layout_height="2dip"  
                   android:background="#AAAAAA"/> 
             <TableRow> 
                   <Button  
                         android:text="   전    송    "  
                         android:id="@+id/button_submit"  
                         android:layout_column="1" 
                         android:layout_width="wrap_content"  
                         android:layout_height="wrap_content"/> 
             </TableRow> 
       </TableLayout> 

  <LinearLayout  
        android:id="@+id/page02"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"> 
        <TextView  
              android:id="@+id/text_result"  
              android:layout_width="fill_parent"  
              android:layout_height="wrap_content"/> 
       </LinearLayout> 
   </FrameLayout>   
</LinearLayout> 
</TabHost>   
           

 

 

 

 

반응형

 

 

728x90

 



Manifest.xml에 다음과 같은 퍼미션을 줘야 한다.

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


project 

   
package com.http_post; 

import java.io.*; 
import java.net.*; 

import android.app.*; 
import android.os.*; 
import android.util.*; 
import android.view.*; 
import android.widget.*; 

public class MainActivity extends TabActivity { 
    // 전역변수를 선언한다 
    TabHost mTabHost = null; 
    String myId, myPWord, myTitle, mySubject, myResult; 
  
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        
        mTabHost = getTabHost();          // Tab 만들기 
        mTabHost.addTab(mTabHost.newTabSpec("tab_1").setIndicator("서버로 전송").setContent(R.id.page01)); 
        mTabHost.addTab(mTabHost.newTabSpec("tab_2").setIndicator("서버에서 받음").setContent(R.id.page02)); 
        findViewById(R.id.button_submit).setOnClickListener(buttonClick);  
    } 
    
    //------------------------------ 
    //    button Click 
    //------------------------------ 
    Button.OnClickListener buttonClick = new Button.OnClickListener() { 
        public void onClick(View v) { 
           // 사용자가 입력한 내용을 전역변수에 저장한다 
           myId = ((EditText)(findViewById(R.id.edit_Id))).getText().toString();  
           myPWord = ((EditText)(findViewById(R.id.edit_pword))).getText().toString();  
           myTitle = ((EditText)(findViewById(R.id.edit_title))).getText().toString();  
           mySubject = ((EditText)(findViewById(R.id.edit_subject))).getText().toString();  
    
           HttpPostData();   // 서버와 자료 주고받기 
       } 
    };  
    
    //------------------------------ 
    //   Http Post로 주고 받기 
    //------------------------------ 
    public void HttpPostData() { 
         try { 
              //-------------------------- 
              //   URL 설정하고 접속하기 
              //-------------------------- 
              URL url = new URL("http://korea-com.org/foxmann/lesson01.php");       // URL 설정 
              HttpURLConnection http = (HttpURLConnection) url.openConnection();   // 접속 
              //-------------------------- 
              //   전송 모드 설정 - 기본적인 설정이다 
              //-------------------------- 
              http.setDefaultUseCaches(false);                                            
              http.setDoInput(true);                         // 서버에서 읽기 모드 지정 
              http.setDoOutput(true);                       // 서버로 쓰기 모드 지정  
              http.setRequestMethod("POST");         // 전송 방식은 POST 

              // 서버에게 웹에서 <Form>으로 값이 넘어온 것과 같은 방식으로 처리하라는 걸 알려준다 
              http.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 
              //-------------------------- 
              //   서버로 값 전송 
              //-------------------------- 
              StringBuffer buffer = new StringBuffer(); 
              buffer.append("id").append("=").append(myId).append("&");                 // php 변수에 값 대입 
              buffer.append("pword").append("=").append(myPWord).append("&");   // php 변수 앞에 '$' 붙이지 않는다 
              buffer.append("title").append("=").append(myTitle).append("&");           // 변수 구분은 '&' 사용  
              buffer.append("subject").append("=").append(mySubject); 
             
              OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 
              PrintWriter writer = new PrintWriter(outStream); 
              writer.write(buffer.toString()); 
              writer.flush(); 
              //-------------------------- 
              //   서버에서 전송받기 
              //-------------------------- 
              InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR");  
              BufferedReader reader = new BufferedReader(tmp); 
              StringBuilder builder = new StringBuilder(); 
              String str; 
              while ((str = reader.readLine()) != null) {       // 서버에서 라인단위로 보내줄 것이므로 라인단위로 읽는다 
                   builder.append(str + "\n");                     // View에 표시하기 위해 라인 구분자 추가 
              } 
              myResult = builder.toString();                       // 전송결과를 전역 변수에 저장 
             ((TextView)(findViewById(R.id.text_result))).setText(myResult); 
             Toast.makeText(MainActivity.this, "전송 후 결과 받음", 0).show(); 
         } catch (MalformedURLException e) { 
                // 
         } catch (IOException e) { 
                //  
         } // try 
    } // HttpPostData 
} // Activity 
         



lesson01.php 


<? 
// 변수 내용 확인 
if ($id == "") $id = "너는 ID도 없냐?"; 
if ($pword == "") $pword = "칠칠맞게 비밀번호도 잊어먹고 다니네..."; 
if ($title == "") $title = "증말 개념없는 사람일세..."; 
if ($subject == "") $subject = "에구~~ 대책이 없네..."; 
// 변수 내용 출력 
echo (" 
  님께서 PHP로 전송한 내용입니다 
  -----------------------------------------------------------------\r\n 
  사용자 ID : $id \r\n 
  비밀번호 : $pword \r\n 
  개념 : $title \r\n 
  대책 : $subject \r\n 
  -----------------------------------------------------------------\r\n 
  축하드립니다. lesson01.php 를 정삭적으로 호출하셨습니다! 
"); 
?> 
          



이렇게 까지 자세히 가르쳐 줘도 이해하지 못한 사람은 부모님을 원망해야 한다(원래 머리 나쁜 사람은 나도 어쩔 도리가 없음... ㅋㅋ) 

Http로 파일 다운받는 것은 다음 기회에.

 

 

 

=================================

=================================

=================================

 

 

 

반응형


관련글 더보기

댓글 영역