我正在尝试从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());
我好几个小时都厌倦了这个问题。任何帮助将不胜感激,谢谢,
答案 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();