我已经开发了一个Android应用,该应用使用PHP Web API存储和从MySQL服务器中检索数据,该MySQL服务器托管在一个公共共享托管帐户中。我有大约550位固定用户,应该登录我的应用并进行数据输入。在测试阶段,我从未遇到任何连接问题。但是当使用全部用户群时,它随机显示错误“ W / System.err:java.io.IOException:Connection上流的意外结束”。在网上搜索了很多,最后得到了对我不起作用的答案。如果有人知道哪里出了问题,我将不胜感激。
首先,我使用AsyncTask和HttpURLConnection连接到Web服务器。然后部分替换为Volley。但是,当大多数用户尝试同时访问时,特别是仍然存在相同的问题。以下是我的Web请求处理程序。
public class RequestHandler {
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams){
URL url;
StringBuilder sb;
String sbString;
try{
url = new URL(requestURL);
//Creating a http url connection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Configuring connection properties
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Creating an output stream
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
while((response = reader.readLine()) != null){
sb.append(response);
}
sbString = sb.toString();
Log.d("RequestHandler", "***** sendPostRequest() >> HTTP_OK >> "+sbString);
}
else{
sbString = "{\"error\": true,\"message\":\"URL Connection Error\"}";
}
}
catch (SocketTimeoutException conTimeoutEx) {
sbString = "{\"error\": true,\"message\":\"Timeout caused by poor Internet connectivity.\"}";
}
catch(Exception e){
sbString = "{\"error\": true,\"message\":\"technical error: "+e.getMessage()+"\"}";
e.printStackTrace();
}
//return sb.toString();
return sbString;
}
}
第二个catch块中出现异常。使用Volley时也会出现相同的例外情况。