-1

in my app i call a webservice..... and it shows some error. the error is given below..

 04-26 10:00:53.682: E/AndroidRuntime(1600): FATAL EXCEPTION: main
 04-26 10:00:53.682: E/AndroidRuntime(1600): android.os.NetworkOnMainThreadException
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at libcore.io.IoBridge.connect(IoBridge.java:112)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at java.net.Socket.connect(Socket.java:842)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
 04-26 10:00:53.682: E/AndroidRuntime(1600):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)

i call the web service as given below....

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPostReq = new HttpPost(serverURL+url);
ObjectMapper mapper = new ObjectMapper();
StringEntity se = null;

try {
    String jSonString = mapper.writeValueAsString(obj);
    se = new StringEntity(jSonString);
    se.setContentType("application/json");
    httpPostReq.setEntity(se);
    httpResponse = httpclient.execute(httpPostReq);
    HttpEntity resultEntity = httpResponse.getEntity();
    inputStream=resultEntity.getContent();
    resultString = convertStreamToString(inputStream);
    Log.e("result",resultString);
}

but this one is working on the emulator.... but not working with device.. i test this using a wi-fi connected tablet... but its not working..... pls help.....me......

4

2 回答 2

0

AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

您应该使用AyncTask

private class MyTask extends AsyncTask<URL, Integer, String> {
 protected Long doInBackground(URL... urls) {
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpPost httpPostReq = new HttpPost(urls[0]);
    ObjectMapper mapper = new ObjectMapper();
    StringEntity se = null;

    try {
        String jSonString = mapper.writeValueAsString(obj);
        se = new StringEntity(jSonString);
        se.setContentType("application/json");
        httpPostReq.setEntity(se);
        httpResponse = httpclient.execute(httpPostReq);
        HttpEntity resultEntity = httpResponse.getEntity();
        inputStream=resultEntity.getContent();
        resultString = convertStreamToString(inputStream);
        Log.e("result",resultString);
        }
         return resultString;
 }

 protected void onProgressUpdate(Integer... progress) {
     // progress
 }

 protected void onPostExecute(String result) {
     // result
 }
}

使用喜欢

 new MyTask().execute(serverURL+url);
于 2013-04-26T05:04:28.120 回答
0

使用此代码会有所帮助,

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
于 2013-04-26T05:09:48.223 回答