2016-08-03 120 views
0

我試圖從帖子發送到服務器從android,但它崩潰,而這樣做。 我無法看到是否有任何錯誤發生,我無法弄清楚如何在android studio中監視http請求。 這是我的代碼Android無法發送帖子

try { 
       String rtoken = FirebaseInstanceId.getInstance().getToken(); 
       Log.v("tokken", rtoken); 
       URL url = new URL("http://my website.com/yyy"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(15001); 
       conn.setConnectTimeout(15001); 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("pid",jo.getString("parent_id")); 
       conn.setRequestProperty("sid",jo.getString("parent_id")); 
       conn.setRequestProperty("token",rtoken); 
       conn.setDoOutput(true); 

       OutputStream outputPost = new BufferedOutputStream(conn.getOutputStream()); 
       writeStream(outputPost); 
       outputPost.flush(); 
       outputPost.close(); 


      } catch (ProtocolException e1) { 
       e1.printStackTrace(); 
      } catch (MalformedURLException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } catch (JSONException e1) { 
       e1.printStackTrace(); 
      } 

和崩潰 的堆棧跟蹤(JsonParser.java:105)是線

的OutputStream outputPost =新的BufferedOutputStream(conn.getOutputStream());

enter image description here

我真的累了這個問題小時。任何幫助將不勝感激,謝謝,

+1

請檢查互聯網連接權限給予或not.Also檢查以下@ManuToMatic回答 – Debojyoti

回答

1

我建議您閱讀關於android線程管理的this article。您正在嘗試在凍結UI的主線程上執行網絡,這就是爲什麼您會收到「NetworkOnMainThread」異常。 開始嘗試一個新的線程,做網絡有這樣的:

(new Thread(){ 
     @Override public void run(){ 
      try { 
       String rtoken = FirebaseInstanceId.getInstance().getToken(); 
       Log.v("tokken", rtoken); 
       URL url = new URL("http://my website.com/yyy"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(15001); 
       conn.setConnectTimeout(15001); 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("pid",jo.getString("parent_id")); 
       conn.setRequestProperty("sid",jo.getString("parent_id")); 
       conn.setRequestProperty("token",rtoken); 
       conn.setDoOutput(true); 

       OutputStream outputPost = new BufferedOutputStream(conn.getOutputStream()); 
       writeStream(outputPost); 
       outputPost.flush(); 
       outputPost.close(); 


      } catch (ProtocolException e1) { 
       e1.printStackTrace(); 
      } catch (MalformedURLException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } catch (JSONException e1) { 
       e1.printStackTrace(); 
      } 
     } 
}).start(); 
+1

感謝主席先生,我今天學到了新的東西:)我我對Java和android非常陌生 –

2

您不允許連接到主線程(即MainActivity或其他視圖)的網絡。

取而代之,創建一個AsyncTask並從那裏連接到網絡。