使用POST从Android客户端向java服务器发送数据并获取JSON响应

时间:2013-11-18 18:32:53

标签: java android json java-ee post

我对Android编程完全陌生。我遇到了以下问题 - 我想验证使用该应用程序的用户的凭据。为此,我想使用POST方法将登录详细信息发送到服务器。从那里我想以JSON格式获得响应。我不知道如何收到回复。我正在使用Java进行服务器端编程。

P.S。我稍后会处理安全问题。 以下是我的Android代码。我知道这是一团糟..请帮忙。

HttpURLConnection连接;         OutputStreamWriter request = null;

        URL url = null;   
        String response = null;         
        String parameters = "username="+mUsername+"&password="+mPassword;   

        try
        {
            url = new URL("address");
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.connect();

            request = new OutputStreamWriter(connection.getOutputStream());
            request.write(parameters);
            request.flush();
            request.close();            
            String line = "";               
            InputStreamReader isr = new InputStreamReader(connection.getInputStream());
            BufferedReader reader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null)
            {
                sb.append(line);
            }
            // Response from server after login process will be stored in response variable.                
            response = sb.toString();
            // You can perform UI operations here
            Toast.makeText(this,"Message from Server: \n"+ response, 0).show();             
            isr.close();
            reader.close();

        }
        catch(IOException e)
        {
            // Error
            return -1;
        }

2 个答案:

答案 0 :(得分:1)

您可以使用一个开源类,您可以轻松浏览代码以查看其工作原理。实际上有很多开源库可以做到这一点,但在我看来,以下是最干净,最容易使用的。

https://github.com/kevinsawicki/http-request/blob/master/lib/src/main/java/com/github/kevinsawicki/http/HttpRequest.java

您的代码可能看起来像这样:

Map<String, String> params = new HashMap<String, String>();
params.put("username", mUsername);
params.put("password", mPassword);
String response = HttpRequest.post(url).form(params).body();

修改

我的原始答案包括params映射到post方法会发送请求作为POST但是url中的params。更正后的版本(form方法)会在体内发送参数。

答案 1 :(得分:0)

您可以将json响应转换为JSONObject类。

看看这个应用程序,代码非常简单。

@Override
    public List<User> getRanking() {
            final List<User> result = new ArrayList<User>();
            String url = "http://quiz-exmo.rhcloud.com/rest/user/ranking/";
            String json = HttpUtil.doGet(url);
            try {
                    final JSONObject resultJsonObject = new JSONObject(json);
                    final JSONArray jsonArray = resultJsonObject.getJSONArray("users");
                    for (int index = 0, total = jsonArray.length(); index < total; index++) {
                            final JSONObject jsonObject = jsonArray.getJSONObject(index);
                            final User user = new User();
                            user.name = jsonObject.getString("name");
                            user.email = jsonObject.getString("email");
                            user.score = jsonObject.getInt("points");
                            result.add(user);
                    }
            } catch (JSONException e) {
                    throw new RuntimeException(e);
            }
            return result;
    }

https://github.com/exmo/equizmo-android/blob/master/maven/equizmo/src/main/java/br/gov/serpro/quiz/service/rest/UserServiceRest.java