[英]Error 500 HttpUrlConnection java
我正在使用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()
如果還有其他疑問,請詢問,我將發送其他數據。
編輯:這是機器人。 它已獲得互聯網許可。
常見原因 :Steam被錯誤的參數或其他未處理的異常關閉。
可能的原因 :在此代碼中從未分配HashMap postDataParam,因此在下面的代碼中傳遞了null。
e.setFixedLengthStreamingMode(
getPostDataString(postDataParam).length());
並且null參數導致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.
我解決了這個問題。 代碼沒問題。 我嘗試連接的Web服務只能通過GET請求訪問。 我將POST切換為GET,現在可以使用了!
但是,現在出現了一個新問題:切換到3g時,出現403:禁止訪問。 有任何想法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.