我现在遇到一个问题,发生的事情是我有一个带有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;
}
}
答案 0 :(得分:0)
好像你是从UI线程调用restTemplate.postForEntity()
。您无法从UI线程进行网络调用。在您的情况下,throw an exception和return null
会发生。
尝试使用AsyncTask
在Thread
或Handler
进行通话。
使用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();