我正在使用 AsyncHttpClient 向我的数据库发出一些请求并且它工作正常。但是,当我尝试在我的手机上使用 3g 时,它根本不起作用。这就是为什么我决定将 HttpClient 更改为 HttpUrlConnection(人们说它在 3g + wifi 下效果更好)。但是,当我编写代码时,我遇到了无法解决的缓冲区问题。代码是:
public class SendPostRequest extends AsyncTask<String, Void, String>{
String base64CredenciaisCodificadas;
HashMap postDataParam;
@Override
protected String doInBackground(String... url) {
String response = "";
try{
URL link = new URL(url[0]);
HttpURLConnection e = (HttpURLConnection)link.openConnection();
e.setReadTimeout(15000);
e.setConnectTimeout(15000);
e.setRequestMethod("POST");
e.setRequestProperty("Authorization", "Basic " + base64CredenciaisCodificadas);
e.setDoInput(true);
e.setDoOutput(true);
e.setFixedLengthStreamingMode(getPostDataString(postDataParam).length());
OutputStream os = e.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParam));
writer.flush();
writer.close();
os.close();
int responseCode = e.getResponseCode();
if (responseCode == 200){
//Code to get data from web service.
}
} catch(Exception e){
}
return response;
}
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
Iterator var4 = params.entrySet().iterator();
while(var4.hasNext()) {
Map.Entry entry = (Map.Entry)var4.next();
if(first) {
first = false;
result.append("?");
} else {
result.append("&");
}
result.append(URLEncoder.encode((String)entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode((String)entry.getValue(), "UTF-8"));
}
return result.toString();
}
}
错误日志是:
10-25 15:16:11.128 30807-30898/petma.testesappcarona I/System.out: Stat: 500; Msg: buffer(com.android.okhttp.internal.http.HttpConnection$UnknownLengthSource@834db8).inputStream()
如果有人有任何疑问,请尽管提问,我会发送更多数据。
编辑:它是安卓。它在 list 中具有互联网访问权限。
最佳答案
常见原因:Steam 因参数错误或其他未处理的异常而关闭。
可能的原因:此代码中从未分配 HashMap postDataParam,因此您在下面的代码中传递了 null。
e.setFixedLengthStreamingMode(
getPostDataString(postDataParam).length());
空参数导致 com.android.okhttp.internal.http.HttpConnection$UnknownLengthSource@834db8).inputStream()
免费咨询:
尽可能重用代码示例
you could have stored getPostDataString(postDataParam) in some variable since its getting used twice in your code.
- 如果可能,对网络调用使用Retrofit。
关于java - 错误 500 HttpUrlConnection java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46938495/