2016-08-14 25 views
0

我的目標是將浮點數組轉換爲字符串數組,並通過POST請求將其發送到我家中的遠程服務器。我沒有使用套接字。我得到getInputStream()和getOutputStream方法的錯誤?

URL url = new URL("http:// (destination of the remote server) : (port)"); 
URLConnection connection = url.openConnection(); 

這是我怎麼寫我的getInputStream()和getOutputStream方法每次我跑我的代碼我的活動崩潰的時間。

OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 

reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

一切正常,但我的活動來getOutputStream()和崩潰。我試着評論出getOutputStream()部分,然後它來到connection.getInputStream()並墜毀。

這可能是因爲這不起作用的原因?

堆棧跟蹤:

              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hfad.viscosity/com.hfad.viscosity.ProcessData}: android.os.NetworkOnMainThreadException 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                     at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5525) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
                    Caused by: android.os.NetworkOnMainThreadException 
                     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) 
                     at java.net.InetAddress.lookupHostByName(InetAddress.java:436) 
                     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
                     at java.net.InetAddress.getAllByName(InetAddress.java:215) 
                     at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
                     at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
                     at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
                     at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
                     at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
                     at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
                     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
                     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
                     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
                     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 
                     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245) 
                     at com.hfad.viscosity.ProcessData.onCreate(ProcessData.java:110) 
                     at android.app.Activity.performCreate(Activity.java:6272) 
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
                     at android.app.ActivityThread.access$900(ActivityThread.java:157)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:5525)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)  
+1

Plesae添加崩潰的堆棧軌跡! – 2016-08-14 05:39:02

+0

你能否檢查'new OutputStreamWriter(connection.getOutputStream());'是否返回一個值? – Smit

+1

在後臺線程上進行聯網。 – Enzokie

回答

1

看樣子,你們是不是活動的後臺線程的主UI線程上嘗試網絡活動。任何涉及在後臺線程上阻塞I/O或包括網絡活動在內的大量處理的活動都需要此功能。因此,您需要使用AsyncTask功能來實現此用例。

請參閱本SO question爲例

的第二件事是,從應用中進行上網,您需要提供上網權限,您的應用程序。請參閱此其他SO question,這應該可以幫助您瞭解如何提供此權限。

如果您即使在執行上述步驟後面臨的任何問題,那麼建議您發佈完整的源代碼(如果可能的話或等效的例子),讓更多的人可以幫你。

+0

那一個是爲現在不推薦使用的HttpClient做的。你有任何想法如何使用HttpURLConnection完成? –