引用了别人写的一个安卓端HttppostTask类做练习。想要访问本地Tomcat服务器的程序,结果安卓端每次都出现这个异常,Manifest中联网权限已经设置,查了好久都不知道是什么问题
每次运行到DataOutputStream out = new DataOutputStream(connection.getOutputStream()); 这句话的时候都会抛出异常,有没有可能是因为tomcat服务器的问题?下面附上代码:public class HttpPostTask extends AsyncTask<String, String, String> { /** BaseActivity 中基础问题的处理 handler */
private Handler mHandler; /** 返回信息处理回调接口 */
private ResponseHandler rHandler; /** 请求类对象 */
private CommonRequest request; public HttpPostTask(CommonRequest request,
Handler mHandler,
ResponseHandler rHandler) {
this.request = request;
this.mHandler = mHandler;
this.rHandler = rHandler; } @Override
protected String doInBackground(String... params) {
StringBuilder resultBuf = new StringBuilder();
try {
URL url = new URL(params[0]);
// 第一步:使用URL打开一个HttpURLConnection连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 第二步:设置HttpURLConnection连接相关属性
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
connection.setRequestMethod("POST"); // 设置请求方法,“POST或GET”
connection.setConnectTimeout(80000); // 设置连接建立的超时时间
connection.setReadTimeout(80000); // 设置网络报文收发超时时间
connection.setDoOutput(true);
connection.setDoInput(true); // 如果是POST方法,需要在第3步获取输入流之前向连接写入POST参数
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(request.getJsonStr());
out.flush();
out.close(); // 第三步:打开连接输入流读取返回报文 -> *注意*在此步骤才真正开始网络请求
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// 通过连接的输入流获取下发报文,然后就是Java的流处理
InputStream in = connection.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String line;
while((line = read.readLine()) != null) {
resultBuf.append(line);
}
return resultBuf.toString();
} else {
// 异常情况,如404/500...
mHandler.obtainMessage(Constant.HANDLER_HTTP_RECEIVE_FAIL,
"[" + responseCode + "]" + connection.getResponseMessage()).sendToTarget();
}
} catch (IOException e) {
// 网络请求过程中发生IO异常
e.printStackTrace();
mHandler.obtainMessage(Constant.HANDLER_HTTP_SEND_FAIL,
e.getClass().getName() + " : " + e.getMessage()).sendToTarget(); }
return resultBuf.toString();
} @Override
protected void onPostExecute(String result) {
if (rHandler != null) {
if (!"".equals(result)) {
/* 交易成功时需要在处理返回结果时手动关闭Loading对话框,可以灵活处理连续请求多个接口时Loading框不断弹出、关闭的情况 */ CommonResponse response = new CommonResponse(result);
// 这里response.getResCode()为多少表示业务完成也是和服务器约定好的
if ("0".equals(response.getResCode())) { // 正确
rHandler.success(response);
} else {
rHandler.fail(response.getResCode(), response.getResMsg());
}
}
}
}}
每次运行到DataOutputStream out = new DataOutputStream(connection.getOutputStream()); 这句话的时候都会抛出异常,有没有可能是因为tomcat服务器的问题?下面附上代码:public class HttpPostTask extends AsyncTask<String, String, String> { /** BaseActivity 中基础问题的处理 handler */
private Handler mHandler; /** 返回信息处理回调接口 */
private ResponseHandler rHandler; /** 请求类对象 */
private CommonRequest request; public HttpPostTask(CommonRequest request,
Handler mHandler,
ResponseHandler rHandler) {
this.request = request;
this.mHandler = mHandler;
this.rHandler = rHandler; } @Override
protected String doInBackground(String... params) {
StringBuilder resultBuf = new StringBuilder();
try {
URL url = new URL(params[0]);
// 第一步:使用URL打开一个HttpURLConnection连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 第二步:设置HttpURLConnection连接相关属性
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
connection.setRequestMethod("POST"); // 设置请求方法,“POST或GET”
connection.setConnectTimeout(80000); // 设置连接建立的超时时间
connection.setReadTimeout(80000); // 设置网络报文收发超时时间
connection.setDoOutput(true);
connection.setDoInput(true); // 如果是POST方法,需要在第3步获取输入流之前向连接写入POST参数
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(request.getJsonStr());
out.flush();
out.close(); // 第三步:打开连接输入流读取返回报文 -> *注意*在此步骤才真正开始网络请求
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// 通过连接的输入流获取下发报文,然后就是Java的流处理
InputStream in = connection.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in));
String line;
while((line = read.readLine()) != null) {
resultBuf.append(line);
}
return resultBuf.toString();
} else {
// 异常情况,如404/500...
mHandler.obtainMessage(Constant.HANDLER_HTTP_RECEIVE_FAIL,
"[" + responseCode + "]" + connection.getResponseMessage()).sendToTarget();
}
} catch (IOException e) {
// 网络请求过程中发生IO异常
e.printStackTrace();
mHandler.obtainMessage(Constant.HANDLER_HTTP_SEND_FAIL,
e.getClass().getName() + " : " + e.getMessage()).sendToTarget(); }
return resultBuf.toString();
} @Override
protected void onPostExecute(String result) {
if (rHandler != null) {
if (!"".equals(result)) {
/* 交易成功时需要在处理返回结果时手动关闭Loading对话框,可以灵活处理连续请求多个接口时Loading框不断弹出、关闭的情况 */ CommonResponse response = new CommonResponse(result);
// 这里response.getResCode()为多少表示业务完成也是和服务器约定好的
if ("0".equals(response.getResCode())) { // 正确
rHandler.success(response);
} else {
rHandler.fail(response.getResCode(), response.getResMsg());
}
}
}
}}
解决方案 »
- 强烈建议升级ADT和SDK到版本Version: 20
- I2S与MI2S的区别
- activity之间怎么传递inputstream或者outputstream参数
- 各位前辈,再来看一个简单的布局吧
- 求一个android下阅读doc文件的程序源码
- 如何通过listview显示未知结构的数据库表
- 用虚拟机跑android4.0,总是出现各种程序的Unfortunately ,XXX has stopped
- Android源码编译出错,各位帮忙看看是什么原因
- 求大神给个思路,小弟百思不得其解
- Mac版Android Studio2.3.1 Srttings中为什么没有Plugins
- ava.lang.SecurityException: Given caller package is not running in process
- 【求助】安卓程序如何一直进行后台监控不被杀死
W/System.err: at java.net.Socket.createImpl(Socket.java:454)
at java.net.Socket.getImpl(Socket.java:517)
at java.net.Socket.setSoTimeout(Socket.java:1108)
at com.android.okhttp.Connection.connectSocket(Connection.java:195)
at com.android.okhttp.Connection.connect(Connection.java:172)
W/System.err: at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:257)
at com.example.hp.webtest.baselibrary.http.HttpPostTask.doInBackground(HttpPostTask.java:65)
W/System.err: at com.example.hp.webtest.baselibrary.http.HttpPostTask.doInBackground(HttpPostTask.java:25)
at android.os.AsyncTask$2.call(AsyncTask.java:304)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)