【问题标题】:Finding out http response code in android在android中找出http响应代码
【发布时间】:2014-12-18 20:45:45
【问题描述】:

我需要能够在 android 中获取将由 php 代码生成的 http 标头代码。

我对 android 很陌生,无法掌握正确的方法。

目前我在我的 signup.java 文件中的代码能够将一些数据发布到基于 php 的 web 服务,并根据发送的 web 服务回显一个 json 编码响应的数据。

发生错误时响应的php代码是

$response["error"] = true;
$response["message"] = "Username Already taken";
echoRespnse(400,$response);

成功的代码是

$response["error"] = false;
$response["message"] = "Successfuly Registered";
echoRespnse(201,$response);

这将生成一个 json 编码的响应消息。

我的 signup.java 文件有以下代码

public void post() throws UnsupportedEncodingException
    {
        // Get user defined values
        uname = username.getText().toString();
        email   = mail.getText().toString();
        password   = pass.getText().toString();
        confirmpass   = cpass.getText().toString();
        phone = phn.getText().toString();

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse httpResponse = null;
        HttpPost httppost = new HttpPost("http://www.rgbpallete.in/led/api/signup");
        if (password.equals(confirmpass)) {
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
                nameValuePairs.add(new BasicNameValuePair("uname", uname));
                nameValuePairs.add(new BasicNameValuePair("pass", password));
                nameValuePairs.add(new BasicNameValuePair("email", email));
                nameValuePairs.add(new BasicNameValuePair("phone", phone));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                httpResponse = httpclient.execute(httppost); //http header response??
                //Code to check if user was successfully created
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            Toast.makeText(getBaseContext(), "Password mismatch", Toast.LENGTH_SHORT).show();
            //Reset password fields
            pass.setText("");
            cpass.setText("");
        }

    }

我想知道httpResponse 是否会保存由 web 服务生成的 http 标头响应代码,或者我是否需要解析 json 响应消息以了解 web 服务返回的内容。

【问题讨论】:

  • 不是真的,我在这里有 2 个问题,一个是否使用 http 标头是正确的方法,以及 2 个是否 httpResponse = httpclient.execute(httppost) 将保存 http 标头代码。不想知道如何获得http header
  • 不清楚你在问什么。您要检索什么标头,目的是什么?您将收到的实际格式取决于您的 php.ini 中 echoRespnse 的实现。 http header code 我假设你的意思是状态码?
  • (附带说明,一旦您测试了状态码为 201,请尝试 Strin message = new JSONObject(EntityUtils.toString(httpResponse.getEntity())).getString("message");。)

标签: java android json web-services


【解决方案1】:

可以这样获取响应码:

final int statusCode = httpResponse.getStatusLine().getStatusCode();
switch (statusCode)
{
    case 201:
        // Successfuly Registered
        break;
    case 400: 
        // Username Already taken
        break;
    default:
        break;
}

要列出标题值,您可以使用:

for (final Header h : httpResponse.getAllHeaders())
{
    Log.d("Responser Header", h.getName() + ": " + h.getValue()); // or h.getElements()
}

或直接选择所需的标题:

final String[] contentLength = httpResponse.getHeaders("Content-Length");

并解析它。

【讨论】:

  • 只使用代码的第一部分statusCode 是否也需要列出标题值?
  • 为了识别状态码,第一部分就够了。如果您需要任何标头值(如特定消息),您可能也希望使用 2.1 或更确切地说是 2.2 部分的答案。
猜你喜欢
  • 2020-11-12
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多