使用springframework显示发布请求响应

时间:2018-01-09 06:00:35

标签: android spring codeigniter

我现在遇到一个问题,发生的事情是我有一个带有codeigniter的api休息,我发出了post请求,它返回了一个我需要用来在我的app中显示的json。我使用RestTemplate但我无法得到答案来展示它。谢谢你的帮助。

与邮递员的回应是:

{"response": "iiprak"}

和我的应用代码:

public String generate(Coupon coupon){
    try {
        Map<String, Integer> values = new HashMap<String, Integer>();
        values.put("id_client", coupon.getId_client());
        values.put("id_promo", coupon.getId_promo());
        JSONObject jsonObject = new JSONObject(values);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> entity = new HttpEntity<String>(jsonObject.toString(), headers);
        //restTemplate.postForEntity(BASE_URL, entity, null);
        ResponseEntity<String> response = restTemplate.postForEntity(BASE_URL, entity, null);

        String coupon = response.getBody();
        return coupon;
    } catch (Exception e){
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

好像你是从UI线程调用restTemplate.postForEntity()。您无法从UI线程进行网络调用。在您的情况下,throw an exceptionreturn null会发生。

尝试使用AsyncTaskThreadHandler进行通话。

使用Spring框架和AsyncTask这里有一个很好的例子 - https://spring.io/guides/gs/consuming-rest-android/

上述页面中的示例包含您的要求:

private class HttpRequestTask extends AsyncTask<Void, Void, String> {
    @Override
    protected String doInBackground(Void... params) {
        try {
            // BELOW IS YOUR CODE IN QUESTION, I am not validating it.
            Map<String, Integer> values = new HashMap<String, Integer>();
            values.put("id_client", coupon.getId_client());
            values.put("id_promo", coupon.getId_promo());
            JSONObject jsonObject = new JSONObject(values);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<String> entity = new HttpEntity<String>(jsonObject.toString(), headers);
            //restTemplate.postForEntity(BASE_URL, entity, null);
            ResponseEntity<String> response = restTemplate.postForEntity(BASE_URL, entity, null);

            String coupon = response.getBody();
            return coupon;
        } catch (Exception e) {
            Log.e("MainActivity", e.getMessage(), e);
        }

        return null;
    }

    @Override
    protected void onPostExecute(String coupon) {
        couponTextView.setText("Coupon is: " + coupon);
    }

}

现在您可以执行以下任务:

new HttpRequestTask().execute();