Android无法发送帖子

时间:2016-08-03 14:20:24

标签: java android http android-studio post

我正在尝试从android发送邮件到服务器,但它在执行时崩溃了。 我无法看到是否发生任何错误,我无法弄清楚如何在android studio中监控http请求。 这是我的代码

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 = new BufferedOutputStream(conn.getOutputStream());

enter image description here

我好几个小时都厌倦了这个问题。任何帮助将不胜感激,谢谢,

2 个答案:

答案 0 :(得分:2)

您不能在主线程上连接到网络(即MainActivity或其他视图)。

相反,请创建一个AsyncTask并从那里连接到网络。

答案 1 :(得分: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();