无法从 android 客户端调用 API
Failing to make call to API from android client
我有一个 flask RESTFUL API 可以正常运行并部署到 heroku。我现在需要从我的 android 应用发出获取请求。我正在使用图书馆来做这件事。
这是在 url https://thecaffapi.herokuapp.com/api/v1/all_stock 调用 API 的代码,其中 returns 一个 JSON 数组到 android 客户:
client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray allStock) {
for (int i = 0; i < allStock.length(); i++) {
try {
JSONObject stockObject = allStock.getJSONObject(i);
int id = stockObject.getInt("id");
String stockTitle = stockObject.getString("stock_title");
int stockNumber = stockObject.getInt("stock_number");
Stock stock = new Stock(id, stockTitle, stockNumber);
mStockList.add(stock);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
行 client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
是 运行,但是 onSuccess() 方法不是 运行。
当应用程序 运行 时,控制台报告以下与 AsyncHttpClient 相关的信息:
V/AsyncHttpRH: Progress 216 from 216 (100%)
W/JsonHttpRH: onSuccess(int, Header[], JSONObject) was not overriden, but callback was received
为什么 onSuccess() 方法没有被覆盖,因此 运行?
提前致谢,
汤姆
看来你必须覆盖确切的方法
onSuccess(int, Header[], JSONObject),
你的看起来有点不同:
onSuccess(int statusCode, Header[] headers, JSONArray allStock)
你的 api 给你 JSONObject
,而不是 JSONArray
。
onSucess 方法的第三个元素是您的响应应解析到的对象。您的响应不是数组格式,它有一个名称值对,其中值是一个数组。因此,您需要改用 JSONObject 并从中获取数组。
client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
JSONArray allStock = response.getJSONArray("stock");
for (int i = 0; i < allStock.length(); i++) {
try {
JSONObject stockObject = allStock.getJSONObject(i);
int id = stockObject.getInt("id");
String stockTitle = stockObject.getString("stock_title");
int stockNumber = stockObject.getInt("stock_number");
Stock stock = new Stock(id, stockTitle, stockNumber);
mStockList.add(stock);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
我有一个 flask RESTFUL API 可以正常运行并部署到 heroku。我现在需要从我的 android 应用发出获取请求。我正在使用图书馆来做这件事。
这是在 url https://thecaffapi.herokuapp.com/api/v1/all_stock 调用 API 的代码,其中 returns 一个 JSON 数组到 android 客户:
client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray allStock) {
for (int i = 0; i < allStock.length(); i++) {
try {
JSONObject stockObject = allStock.getJSONObject(i);
int id = stockObject.getInt("id");
String stockTitle = stockObject.getString("stock_title");
int stockNumber = stockObject.getInt("stock_number");
Stock stock = new Stock(id, stockTitle, stockNumber);
mStockList.add(stock);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
行 client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
是 运行,但是 onSuccess() 方法不是 运行。
当应用程序 运行 时,控制台报告以下与 AsyncHttpClient 相关的信息:
V/AsyncHttpRH: Progress 216 from 216 (100%)
W/JsonHttpRH: onSuccess(int, Header[], JSONObject) was not overriden, but callback was received
为什么 onSuccess() 方法没有被覆盖,因此 运行?
提前致谢,
汤姆
看来你必须覆盖确切的方法
onSuccess(int, Header[], JSONObject),
你的看起来有点不同:
onSuccess(int statusCode, Header[] headers, JSONArray allStock)
你的 api 给你 JSONObject
,而不是 JSONArray
。
onSucess 方法的第三个元素是您的响应应解析到的对象。您的响应不是数组格式,它有一个名称值对,其中值是一个数组。因此,您需要改用 JSONObject 并从中获取数组。
client.get(baseurl + "all_stock", null, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
JSONArray allStock = response.getJSONArray("stock");
for (int i = 0; i < allStock.length(); i++) {
try {
JSONObject stockObject = allStock.getJSONObject(i);
int id = stockObject.getInt("id");
String stockTitle = stockObject.getString("stock_title");
int stockNumber = stockObject.getInt("stock_number");
Stock stock = new Stock(id, stockTitle, stockNumber);
mStockList.add(stock);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});