Android从远程服务器调用获得意外响应

时间:2012-03-02 23:12:23

标签: android

我正在尝试使用用户凭据向远程服务器发送呼叫,并返回true / false以确定人员凭据是否匹配。但是我的代码在JSON lol中将凭据返回给我了

        try 
        {               
            String query = String.format("login=%s&password=%s", 
                     URLEncoder.encode(myEmail, charset), 
                     URLEncoder.encode(myPassword, charset));

            final URL url = new URL( myUrl + "?" + query );



            final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true); 
            conn.setRequestMethod("POST");

            conn.setRequestProperty("login", myEmail);
            conn.setRequestProperty("password", myPassword);

            conn.setUseCaches(false);

            final InputStream is = conn.getInputStream();
            final byte[] buffer = new byte[8196];
            int readCount;
            final StringBuilder builder = new StringBuilder();
            while ((readCount = is.read(buffer)) > -1) 
            {
                builder.append(new String(buffer, 0, readCount));
            }

            response = builder.toString();      
            Log.d( "After call, response: " , " " + response);
        } 
        catch (Exception e) 
        {
                Log.d( "Exception: " , "Yup");
                e.printStackTrace();
        }

有谁知道如何从服务器获取输出而不是我现在回来的这些东西?

谢谢!

3 个答案:

答案 0 :(得分:1)

令人惊讶的是,您发布的代码可以在我的独立Java客户端以及我的Android应用程序中运行。服务器部分似乎有问题。你能从服务器发布任何额外的输出吗?

在服务器上我有一个servlet,它以JSON格式接收用户和密码,并以json格式返回验证结果。

答案 1 :(得分:1)

首先,您将用户名和密码作为URL编码参数http://.../?username=abc&password=test和HTTP请求标头发送。 查看服务文档以查看预期用户名和密码的位置。 可能是您的服务使用HTTP基本身份验证?如果是这样,请在HTTP身份验证下查看http://developer.android.com/reference/java/net/HttpURLConnection.html上的Android文档。

PS:记得在使用后断开连接()连接,以便释放资源。

答案 2 :(得分:1)

另一个解决方案是使用HTTPClient可能的情况就是这样:

HttpClient httpClient = new DefaultHttpClient();
HttpPost request = new HttpPost(yoururlhere);
HttpResponse response = httpClient.execute(request);
respondEntity = EntityUtils.toString(response.getEntity());

这也可以根据您的需要与HttpGet一起使用。也许这会让你清楚地了解服务器“真正”的内容。