引用了别人写的一个安卓端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());
}
}
}
}}

解决方案 »

  1.   

    https://www.cnblogs.com/Lewis/p/3298994.html
      

  2.   

    W/System.err: java.net.SocketException: Permission denied
    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)
      

  3.   

    有没有可能是国产ROM禁止了这个app的网络访问?