웹 서버에서 JSON 데이터를 보내고이 방법으로 응답을받습니다.웹 서버에 httpclient.execute 예외가 발생했습니다.
public JSONObject postOnServer(JSONObject json) {
HttpResponse response;
JSONObject res = null;
HttpClient httpclient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000);
HttpPost httpPost = new HttpPost(PATH);
try {
//StringEntity stringEntity = new StringEntity("json", String.valueOf(json));
ByteArrayEntity postMessage = new ByteArrayEntity(json.toString().getBytes("UTF8"));
httpPost.setEntity(postMessage);
response = httpclient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
InputStream instream = response.getEntity().getContent();
try {
res = new JSONObject(convertStreamToString(instream));
} catch (JSONException e) {
// TODO Auto-generated catch block
Log.i("Response JSON", e.toString());
}
} else {
res = new JSONObject();
try {
res.put("error", "Unable to load page.");
} catch (JSONException e) {
// TODO Auto-generated catch block
}
}
} catch (IOException ex) {
Log.i("Connection.postOnServer", "1.try exception: "+ex);
res = new JSONObject();
try {
res.put("error", "Synchronization is not enable: Connection has aborted.");
} catch (JSONException e) {
Log.i("Connection.postOnServer", "put exception: "+e);
}
}
return res;
}
그러나 항상
05-24 10:58:51.635: E/AndroidRuntime(4709): FATAL EXCEPTION: main
05-24 10:58:51.635: E/AndroidRuntime(4709): android.os.NetworkOnMainThreadException
05-24 10:58:51.635: E/AndroidRuntime(4709): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-24 10:58:51.635: E/AndroidRuntime(4709): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
05-24 10:58:51.635: E/AndroidRuntime(4709): at libcore.io.IoBridge.connectErrno(IoBridge.java:138)
05-24 10:58:51.635: E/AndroidRuntime(4709): at libcore.io.IoBridge.connect(IoBridge.java:112)
05-24 10:58:51.635: E/AndroidRuntime(4709): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-24 10:58:51.635: E/AndroidRuntime(4709): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
05-24 10:58:51.635: E/AndroidRuntime(4709): at java.net.Socket.connect(Socket.java:842)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-24 10:58:51.635: E/AndroidRuntime(4709): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
사람의 생각이이 예외와 일치 response = httpclient.execute(httpPost);
에 종료, 어떻게 그것을 해결하기 위해? 내가 catch (IOException)를 사용하면 갈증이 생기지 만 응용 프로그램은 파괴됩니다. catch (Exception) 응용 프로그램을 사용하면 아무런 조치없이 계속 진행됩니다. 데이터를 보내려면 어떻게해야합니까?
http://stackoverflow.com/a/4822122/1251715 [HonyComb 및 DefaultHttpClient (의 동일한 문제 – Th0rndike
중복 가능성 http://stackoverflow.com/questions/4821845/honycomb-and -defaulthttpclient) – Marijn