Android 为什么我在安卓系统中向服务发送错误的电子邮件或密码时会收到500个响应码?

Android 为什么我在安卓系统中向服务发送错误的电子邮件或密码时会收到500个响应码?,android,web-services,Android,Web Services,我遇到了一个非常奇怪的问题。我正在尝试在我的应用程序中实现登录服务。当我传递正确的电子邮件和密码时,服务按预期返回响应(意味着不会出现错误),但当我谨慎地传递错误的电子邮件或密码时,geInputStream()方法抛出FileNotFoundException。我不知道这背后的原因是什么。此外,在调用getInputStream()方法之前,我还检查了状态代码(当我故意传递错误的电子邮件和密码时就是这种情况)。状态代码是500。我检查了500,这是内部服务器错误。我的问题是为什么会这样?我的意

我遇到了一个非常奇怪的问题。我正在尝试在我的应用程序中实现登录服务。当我传递正确的电子邮件和密码时,服务按预期返回响应(意味着不会出现错误),但当我谨慎地传递错误的电子邮件或密码时,geInputStream()方法抛出FileNotFoundException。我不知道这背后的原因是什么。此外,在调用getInputStream()方法之前,我还检查了状态代码(当我故意传递错误的电子邮件和密码时就是这种情况)。状态代码是500。我检查了500,这是内部服务器错误。我的问题是为什么会这样?我的意思是,当故意传递错误的电子邮件或密码时,为什么会出现内部服务器?还有一件事我想说的是,我已经检查了邮递员的相同服务,它工作正常。如果我传递了错误的电子邮件或密码,邮递员将返回预期的错误。下面是我正在使用的代码

  private String invokeWebservice() {
    String data = null;
    HttpURLConnection conn = null;
    BufferedReader in = null;
    try {
        String webservice = Constants.BASE_URL + serviceName;
        LogUtility.debugLog("webservice just called "+ webservice);
        URL url = new URL(webservice);
        conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setUseCaches(false);

        if (isPost) {
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            Writer writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            if (jsonObject != null)
                writer.write(jsonObject.toString());
            writer.close();
        }

        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while ((l = in.readLine()) != null)
            sb.append(l + nl);
        in.close();

        data = sb.toString();

        return data;
    } catch (Exception e) {
        LogUtility.errorLog("exception while calling web service");
    } finally {
        try {
            if (conn != null)
                conn.disconnect();
            if (in != null)
                in.close();
        } catch (Exception ex) {
           // LogUtility.errorLogWithException(ex, ex.getMessage());
        }
    }

    return data;
}

有什么帮助吗?

花了一段时间后,我现在能够解决我的问题。将我的答案发布给其他人。向服务传递错误的电子邮件和密码是正确的,服务器也在使用这些参数,因为出现了错误(因为电子邮件和密码),这就是它返回500代码的原因。所以,我检查了状态代码是否为200,然后使用getInputStream()方法,否则调用getErrorStream()方法。通过这种方式,我得到了具有error属性的流(该属性包含error详细信息)。下面是我使用的代码

if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
            in = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        } else {
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        }

希望它也能帮助其他人。

此错误主要是由于服务器端缺少验证。我建议检查服务器(服务)端代码。不,我不认为这可能是服务器端错误,因为正如我在《博文》中提到的,它工作正常