java - 错误 500 HttpUrlConnection java

标签 java android httpurlconnection

我正在使用 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/

相关文章:

java - JOptionPane.showMessageDialog 截断 JTextArea 消息

java - Maven:复制到 FTP 抛出 java.io.IOException:非法搜索

java - 使用线程时 Swing GUI 卡住

android - 已删除的图片在图库中仍然可见

android - 如何调整启动器中矢量图标的大小

java - 如果我派生的 java 对象大小发生变化,我是否需要重建?

android - Gradle 同步 : Connection to the Internet denied

java - 我的 Android 应用程序中出现 IOException

web-services - JAXB 解码问题 Weblogic 12c

javascript - 使用 Java 从网络下载生成的图像