2016-08-03 108 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并从那里连接到网络。