为什么我在安装错误的电子邮件或密码到android服务时得到500响应代码?

时间:2017-03-10 05:50:41

标签: android web-services

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

  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;
}

任何帮助?

1 个答案:

答案 0 :(得分:0)

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

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

希望它也有助于其他人。