public class bangsong extends Activity {
String song, story, str;
int b;
boolean isrun;
~~~~~~
public void mOnclick(View v) {
new AlertDialog.Builder(this).setTitle("방송신청")
.setMessage("이대로 신청하시겠습니까?")
.setPositiveButton("신청", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
bangsong2 a = new bangsong2();
a.start();
a.interrupt();
}
}).setNegativeButton("취소", null).show();
}
public class bangsong2 extends Thread {
public void run() {
isrun = true;
while (isrun) {
song = ((EditText) (findViewById(R.id.editText1))).getText()
.toString();
story = ((EditText) (findViewById(R.id.editText4))).getText()
.toString();
if (song.equals("")) {
b = 3;
} else if (story.equals("")) {
b = 4;
} else {
URL url = null;
try {
url = new URL("~~~.php");
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection server = null;
try {
server = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
server.setDefaultUseCaches(false);
server.setDoInput(true);
server.setDoOutput(true);
server.setAllowUserInteraction(true);
try {
server.setRequestMethod("POST");
} catch (ProtocolException e) {
e.printStackTrace();
}
server.setRequestProperty("content-type",
"application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
SharedPreferences pref = getSharedPreferences("PrefTest", 0);
String prefid = pref.getString("pid", "");
buffer.append("id").append("=").append(prefid).append("&");
buffer.append("story").append("=").append(story)
.append("&");
buffer.append("song").append("=").append(song);
OutputStreamWriter outStream = null;
try {
outStream = new OutputStreamWriter(
server.getOutputStream(), "EUC-KR");
} catch (UnsupportedEncodingException e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
Log.e("StackTraceExampleActivity", exceptionAsString);
} catch (IOException e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
Log.e("StackTraceExampleActivity", exceptionAsString);
}
PrintWriter writer = new PrintWriter(outStream);
writer.write(buffer.toString());
writer.flush();
InputStreamReader tmp = null;
try {
tmp = new InputStreamReader(server.getInputStream(),
"EUC-KR");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(tmp);
try {
str = reader.readLine();
if (str.equals("1")) {
b = 1;
} else {
b = 2;
}
} catch (IOException e) {
e.printStackTrace();
}
}
mhandler12.sendEmptyMessage(0);
}
}
};
Handler mhandler12 = new Handler() {
public void handleMessage(Message msg) {
if (b == 1) {
Toast.makeText(bangsong.this, "접수되었습니다", Toast.LENGTH_SHORT)
.show();
isrun = false;
} else if (b == 2) {
Toast.makeText(bangsong.this, "네트워크 이상", Toast.LENGTH_SHORT)
.show();
} else if (b == 3) {
Toast.makeText(bangsong.this, "신청곡을 채워주세요", Toast.LENGTH_SHORT)
.show();
} else if (b == 4) {
Toast.makeText(bangsong.this, "사연을 채워주세요", Toast.LENGTH_SHORT)
.show();
}
}
};
}
방송사연과 신청곡을 보내는 기능의 액티비티입니다. 신청을 위해 메인 스레드 외에 별도의 스레드를 생성해서 보낸 다음서버에서 1을 받아오면 이것을 메인 스레드의 핸들러에 전달해서 "접수되었습니다."라고 토스트를 화면에 띄워주는 것입니다. 그런데 신청을 하고 서버를 보면 한번 신청했는데도 꼭 2번 중복 신청이 되어있습니다. 왜 그럴까요? ㅜㅜ
그리고 스레드를 죽이기 위해 a.interrupt();를 썼고 또 핸들러에서 스레드에서의 while 플래그값을 false로 주었는데 맞나요? run() 함수 안에 while(flag)의 flag 값을 false로 준다 해도 결국 run 함수는 실행되고 있는 거 아닌가요? 구글링하니 거의 이런식으로 플래그를 주길래 한번 써봤는데... 이 소스에서 스레드를 완전히 죽이기 위한 개선소스도 알려주시면 감사하겠습니다^^