WCF 서비스를 디버깅하는 동안이 문제가 발생했습니다. 나는 서비스와 통신하는 HttpURLConnection
을 사용한다. 서비스를 디버깅하는 동안 Android 응용 프로그램이 응답을 기다리는 동안 서버를 중지해야하는 문제가 발생하여 Android 응용 프로그램이 예기치 않게 중지되었습니다.서버 연결이 끊어지면 안드로이드 응용 프로그램이 충돌 함
예기치 않게 갑자기 서버를 중단하고 안드로이드 클라이언트를 정상적으로 처리하는 가장 좋은 방법은 무엇입니까?
@Override
protected JSONObject doInBackground(BLHttpJSONPostModel ...models) {
JSONObject jsonObject = null;
BLHttpJSONPostModel postModel = models[0];
URL url = null;
byte[] postData = null;
String protocol = null;
String response = null;
InputStream responseStream = null;
OutputStream outStream = null;
HttpURLConnection connection = null;
BufferedReader bufferedReader = null;
StringBuilder builder = null;
try {
url = new URL(postModel.getUrlString());
postData = postModel.getPostDataAsJsonObject().toString().getBytes();
protocol = url.getProtocol();
} catch (MalformedURLException e1) {
e1.printStackTrace();
return null;
}
if (protocol.equals("https")) {
connection = this.setUpHttps(url); // establishes a secure connection if protocol is HTTPS
}
else if (protocol.equals("http")) {
try {
connection = (HttpURLConnection)url.openConnection(); // establishes un-secured connection
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
else
return null; // handles unsupported protocol
try {
connection.setRequestProperty("Content-Length", String.valueOf(postData.length));
connection.setRequestProperty("CONTENT-TYPE", "application/json");
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect();
outStream = connection.getOutputStream();
outStream.write(postData);
outStream.close();
String _type = connection.getContentType(); // for debugging only
String _message = connection.getResponseMessage(); // ""
int size = connection.getContentLength(); // ""
bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
builder = new StringBuilder();
while((response = bufferedReader.readLine()) != null) {
builder.append(response);
}
} catch (IOException e) {
e.printStackTrace(); // no exceptio caught here
} finally {
connection.disconnect();
}
if ((builder != null) && (! builder.toString().equals(""))) {
try {
jsonObject = new JSONObject(builder.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
return jsonObject;
}
스택 추적 : 나는 너무 자주이 문제를 직면
02-20 12:13:33.935: E/AndroidRuntime(1173): FATAL EXCEPTION: AsyncTask #1
02-20 12:13:33.935: E/AndroidRuntime(1173): java.lang.RuntimeException: An error occured while executing doInBackground()
02-20 12:13:33.935: E/AndroidRuntime(1173): at android.os.AsyncTask$3.done(AsyncTask.java:200)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.lang.Thread.run(Thread.java:1096)
02-20 12:13:33.935: E/AndroidRuntime(1173): Caused by: java.lang.NullPointerException
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.io.Reader.<init>(Reader.java:65)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.io.InputStreamReader.<init>(InputStreamReader.java:93)
02-20 12:13:33.935: E/AndroidRuntime(1173): at com.beslogic.remotpayment.connection.PostJSONTask.doInBackground(PostJSONTask.java:136)
02-20 12:13:33.935: E/AndroidRuntime(1173): at com.beslogic.remotpayment.connection.PostJSONTask.doInBackground(PostJSONTask.java:1)
02-20 12:13:33.935: E/AndroidRuntime(1173): at android.os.AsyncTask$2.call(AsyncTask.java:185)
02-20 12:13:33.935: E/AndroidRuntime(1173): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-20 12:13:33.935: E/AndroidRuntime(1173): ... 4 more
스택 추적을 캡처 했습니까? –
@NickCampion 스택 추적으로 업데이트되었습니다. –