지금 구축하고있는 애플리케이션에 HTTP 게시물을 사용할 때 문제가 있습니다. 제한 시간은 다음과 같은 오류와 응용 프로그램이 충돌을 occures 경우 :시간 초과가 발생할 때 오류가 발생했습니다.
06-20 19:01:35.715: E/Timeout Exception:(3802): java.net.SocketTimeoutException
06-20 19:01:35.720: W/dalvikvm(3802): threadid=15: thread exiting with uncaught exception (group=0x40c4d1f8)
06-20 19:01:35.865: D/dalvikvm(3802): GC_CONCURRENT freed 67K, 18% free 13640K/16519K, paused 7ms+3ms
06-20 19:01:35.870: E/AndroidRuntime(3802): FATAL EXCEPTION: AsyncTask #4
06-20 19:01:35.870: E/AndroidRuntime(3802): java.lang.RuntimeException: An error occured while executing doInBackground()
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.os.AsyncTask$3.done(AsyncTask.java:278)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.lang.Thread.run(Thread.java:856)
06-20 19:01:35.870: E/AndroidRuntime(3802): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.os.Handler.<init>(Handler.java:121)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.app.Dialog.<init>(Dialog.java:107)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.app.AlertDialog.<init>(AlertDialog.java:114)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.app.AlertDialog$Builder.create(AlertDialog.java:913)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.app.AlertDialog$Builder.show(AlertDialog.java:931)
06-20 19:01:35.870: E/AndroidRuntime(3802): at com.on_d_mand.live_evenementen.Helper.showAlert(Helper.java:357)
06-20 19:01:35.870: E/AndroidRuntime(3802): at com.on_d_mand.live_evenementen.SyncData.doInBackground(SyncData.java:99)
06-20 19:01:35.870: E/AndroidRuntime(3802): at com.on_d_mand.live_evenementen.SyncData.doInBackground(SyncData.java:1)
06-20 19:01:35.870: E/AndroidRuntime(3802): at android.os.AsyncTask$2.call(AsyncTask.java:264)
06-20 19:01:35.870: E/AndroidRuntime(3802): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-20 19:01:35.870: E/AndroidRuntime(3802): ... 5 more
이 소스가 같은 모습입니다 : 자바의 RuntimeException에 의한
//ON PRE EXECUTE
protected void onPreExecute(){
if(MESSAGE != null){
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage(MESSAGE);
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
}
//DO IN BACKGROUND
@Override
protected String doInBackground(String... urls) {
//SYNC DATA WITH THE SERVER
try{
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds (30 seconds) until a connection is established.
// The default value is zero, that means the timeout is not used.
int timeoutConnection = 30 * 1000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds (30 seconds) which is the timeout for waiting for data.
int timeoutSocket = 30 * 1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(urls[0]);
httppost.setEntity(new UrlEncodedFormEntity(preparedInformation));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
IS = entity.getContent();
}catch (SocketTimeoutException ste){
Log.e("Timeout Exception: ", ste.toString());
}
catch(Exception e){
Log.e("log_tag", "Error in http connection"+e.toString());
}
//CONVERT DATA INTO STRING
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(IS,"iso-8859-1"),8);
SB = new StringBuilder();
SB.append(reader.readLine() + "\n");
String line="0";
while ((line = reader.readLine()) != null) {
SB.append(line + "\n\n");
}
IS.close();
this.result = SB.toString();
}
catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
return this.result;
}
... 좋아, 그래서 뭐? 이 문제는 내가 지금 가지고있는 응용 프로그램의 마지막 버그이기 때문에 피해야합니다. 어떤 도움이라도 대단히 감사합니다.
네, 감사합니다. 나는 그 방법을 제거했으나 문제는 여전히 발생합니다 ... – Xarialon
어떤 유형의 문제입니까? 말해줘. – Sajmon
유형별로 어떤 의미입니까? – Xarialon