public class httppost{
private ResponseHandler<String> responseHandler = new BasicResponseHandler();
public boolean setMessage(ArrayList nameValuePairs , String posturl){
String totalMessage = "";
String url = "생략";
String result = "";
boolean flag;
HttpClient httpclient = new DefaultHttpClient();
try {
//접속에 5초가 걸리면 Timeout
HttpParams params = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
//http 로 서버에 데이터 처리 요청
HttpPost httppost = new HttpPost(url);
UrlEncodedFormEntity entityRequest = new UrlEncodedFormEntity(nameValuePairs, "EUC-KR");
httppost.setEntity(entityRequest);
httpclient.execute(httppost, responseHandler);
flag = true;
} catch (ClientProtocolException e) {
Log.v("JSP", e.toString());
e.printStackTrace();
flag = false;
} catch (ConnectTimeoutException e){
Log.d("JSP", e.toString());
e.printStackTrace();
flag = false;
} catch (IOException e) {
Log.d("JSP", e.toString());
e.printStackTrace();
flag = false;
} finally {
httpclient.getConnectionManager().shutdown();
}
return flag;
서버를 꺼놓은 상태라 접속이 지연되고
ConnectTimeoutException 이 발생합니다.
그리고 false 를 리턴하게 되는데요
new Thread(){
@Override
public void run(){
String email = ((EditText)loginDlg.findViewById(R.id.ID)).getText().toString();
String password = ((EditText)loginDlg.findViewById(R.id.PW)).getText().toString();
String url = "login.jsp";
ArrayList<NameValuePair> login = new ArrayList<NameValuePair>();
login.add(new BasicNameValuePair("email", email));
login.add(new BasicNameValuePair("pw", password));
postOK = post.setMessage(login, url);
}
}.start();
여기서 위의 return 값을 postOK 에 받게됩니다.
여기서 postOK 가 false면 에러처리를 하고 toast로 접속이 지연됫다고 띄우려고 하는데
디버깅모드로 하면 postOK 에 값 들어가고 그대로 아무 동작이 없네요. 프로그램이 그냥 정지되는것처럼.. 그렇다고 force close도 아니고..
그런데 저 setMessage 메소드안에서 브레이킹걸고 하면 UnCaughtException 이 걸립니다. 원인을 몰라 답답하네요 ㅠ
Toast.makeText(SpaceOpera.this, "접속이 지연되고 있습니다.\n네트워크 상태를 확인해주세요.", Toast.LENGTH_SHORT).show();
}
오 해결했습다!
final Runnable timeout = new Runnable(){
public void run(){
if(!postOK){
loading.dismiss();
Toast.makeText(SpaceOpera.this, "접속이 지연되고 있습니다.\n네트워크 상태를 확인해주세요.", Toast.LENGTH_SHORT).show();
}
}
};
로 Runnable로 필요한 부분을 생성하고,
아까의 스레드 안에 handler.post(timeout); 기존의 핸들러에 post 해서 성공했네요
감사합니다.



