///Java Source
public class MainActivity extends Activity {
String myId, myPWord, myTitle, mySubject, myResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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://172.16.103.221/test.php");
// 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("&");
buffer.append("title").append("=").append(myTitle).append("&");
buffer.append("subject").append("=").append(mySubject);
OutputStreamWriter outStream = new OutputStreamWriter(
http.getOutputStream(), "EUC-KR");
Log.d("check", "1" + myId);
PrintWriter writer = new PrintWriter(outStream);
Log.d("check", "2");
writer.write(buffer.toString());
writer.flush();
Log.d("check", "3");
// --------------------------
// 서버에서 전송받기
// --------------------------
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(); // 전송결과를 전역 변수에 저장
Log.d("check", "Stirng" + myResult);
((TextView) (findViewById(R.id.text_result))).setText(myResult);
Toast.makeText(MainActivity.this, "전송 후 결과 받음", 0).show();
} catch (MalformedURLException e) {
//
} catch (IOException e) {
//
} // try
} // HttpPostData
} // Activity
//PHP Source
<?
// 변수 내용 확인
//if ($id == "")
$id = $_POST["id"];
//if ($pword == "")
$pword = $_POST["pword"];
//if ($title == "")
$title = $_POST["title"];
//if ($subject == "")
$subject = $_POST["subject"];
// 변수 내용 출력
echo ("
님께서 PHP로 전송한 내용입니다
-----------------------------------------------------------------\r\n
사용자 ID : $id \r\n
비밀번호 : $pword \r\n
개념 : $title \r\n
대책 : $subject \r\n
-----------------------------------------------------------------\r\n
축하드립니다. lesson01.php 를 정삭적으로 호출하셨습니다!
");
?>
소스는 이러 합니다.
EdiText입력 후 버튼을 누르면
Http Post 방식으로 android -> php에 전송해주고 다시 php->android로 출력해주는 예제 인데요.
웹브라우저, 다른 pc웹브라우저, 어큐뮬레이터로는 정상적으로 동작 합니다.
근데 핸드폰으로 실행해서 버튼 누르면, "예상치 않게 중지되었습니다." 라고 오류가 떠서 어플이 죽어요. 왜 그럴까요 미치겠습니다 ㅜㅜ