我正在使用AsyncTask發送一些消息到服務器。這個AsynTask是定義在一個不同的類(CommTask.java)從主要活動類。 插座使用,從weberknecht一個網頁套接字,在的AsyncTask的doInBackground方法創建,並且我在CommTask.java一個公共方法(SendDataToServer),即在主活動使用通過CommTask.java類中的實例。android.os.NetworkOnMainThreadException當我使用AsyncTask和HTTPS
我使用CommTask的公共方法之前初始化主活動實例:
commTask = new CommTask(serverIpAddress, socket, textStatus);
commTask.execute();
,當我有數據要發送,然後我打電話:
commTask.SendDataToServer(...);
當使用在主要活動中CommTask.java的公共方法和套接字使用http協議
socket = new SocketIO("http://"+this.serverIpAddress+":3000/");
個沒有異常惜售,但是當它使用https
socket = new SocketIO("https://"+this.serverIpAddress+":3000/");
android.os.NetworkOnMainThreadException apears。
有什麼想法?爲什麼會發生這種情況?
如果你需要看看在代碼中看到這一點:
https://github.com/Javi44/LocAALTOn/tree/WebSockets-Gottox/src/com/android/locaalton
編輯:
完整的錯誤堆在這裏:
03-12 15:14:36.090: W/System.err(27088): android.os.NetworkOnMainThreadException
03-12 15:14:36.100: W/System.err(27088): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
03-12 15:14:36.100: W/System.err(27088): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:686)
03-12 15:14:36.100: W/System.err(27088): at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:185)
03-12 15:14:36.100: W/System.err(27088): at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:85)
03-12 15:14:36.100: W/System.err(27088): at de.roderick.weberknecht.WebSocketConnection.send(WebSocketConnection.java:165)
03-12 15:14:36.100: W/System.err(27088): at io.socket.WebsocketTransport.send(WebsocketTransport.java:137)
03-12 15:14:36.100: W/System.err(27088): at io.socket.IOConnection.sendPlain(IOConnection.java:452)
03-12 15:14:36.100: W/System.err(27088): at io.socket.IOConnection.emit(IOConnection.java:825)
03-12 15:14:36.100: W/System.err(27088): at io.socket.SocketIO.emit(SocketIO.java:236)
03-12 15:14:36.100: W/System.err(27088): at com.android.locaalton.CommTask.SendDataToServer(CommTask.java:137)
03-12 15:14:36.105: W/System.err(27088): at com.android.locaalton.LocAALTOnActivity$2.onClick(LocAALTOnActivity.java:200)
03-12 15:14:36.105: W/System.err(27088): at android.view.View.performClick(View.java:4211)
03-12 15:14:36.105: W/System.err(27088): at android.view.View$PerformClick.run(View.java:17267)
03-12 15:14:36.105: W/System.err(27088): at android.os.Handler.handleCallback(Handler.java:615)
03-12 15:14:36.105: W/System.err(27088): at android.os.Handler.dispatchMessage(Handler.java:92)
03-12 15:14:36.105: W/System.err(27088): at android.os.Looper.loop(Looper.java:137)
03-12 15:14:36.105: W/System.err(27088): at android.app.ActivityThread.main(ActivityThread.java:4898)
03-12 15:14:36.105: W/System.err(27088): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 15:14:36.105: W/System.err(27088): at java.lang.reflect.Method.invoke(Method.java:511)
03-12 15:14:36.105: W/System.err(27088): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-12 15:14:36.105: W/System.err(27088): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-12 15:14:36.105: W/System.err(27088): at dalvik.system.NativeStart.main(Native Method)
請發佈包含您的異常的整個Java堆棧跟蹤。 – CommonsWare 2013-03-12 12:54:51
請閱讀更多關於AsyncTasks的信息,並查看一些在線示例。你需要使用asynctask.execute()來運行一個asynctask。你不能只在你的任務中調用函數,並期望它們在後臺運行。 – 2013-03-12 12:57:43
您在CommTask中的公開方法是從主要步驟的主要活動中調用的。 – njzk2 2013-03-12 12:59:42