2016-08-14 2 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() и разбился.

В чем причина, почему это не работает?

StackTrace:

              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 добавить след следа аварии! –

+0

Не могли бы вы проверить, что 'новый OutputStreamWriter (connection.getOutputStream());' даже возвращает значение? – Smit

+1

Сделайте сетевое взаимодействие в фоновом потоке. – Enzokie

ответ

1

Похоже, что вы пытаетесь сетевой активности на основном потоке пользовательского интерфейса для деятельности вместо фонового потока. Он необходим для любой активности, которая включает блокирование ввода-вывода или тяжелой обработки, включая сетевую активность, которая будет выполняться в фоновом потоке. Поэтому вы должны использовать функциональность AsyncTask для достижения этого варианта использования.

Обратитесь к этому SO question для примера

Вторая вещь в том, что для выполнения доступа в Интернет с вашего приложения вам необходимо предоставить права доступа к Интернету для вашего приложения. Обратитесь к этому другому SO question, который должен помочь вам в предоставлении этого разрешения.

Если вы столкнулись с какими-либо проблемами даже после выполнения вышеуказанных шагов, рекомендуется опубликовать весь исходный код (если это возможно или эквивалентный пример), чтобы больше людей могли вам помочь.

+0

Это делает это для HttpClient, который устарел сейчас. Вы знаете, как это можно сделать с помощью HttpURLConnection? –

 Смежные вопросы

  • Нет связанных вопросов^_^