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 해서 성공했네요
감사합니다.