无法从Android客户端调用API

时间:2016-11-27 21:09:53

标签: android json api get asynchttpclient

我有一个烧瓶RESTFUL API,它完全正常运行并部署到heroku。我现在需要从我的Android应用程序发出get请求。我正在使用该库来执行此操作。

以下是在url https://thecaffapi.herokuapp.com/api/v1/all_stock调用API的代码,它将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()方法没有被覆盖并因此运行?

提前致谢,

汤姆

2 个答案:

答案 0 :(得分:1)

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();
            }
        }
    }
});

答案 1 :(得分:0)

好像你必须覆盖确切的方法

onSuccess(int, Header[], JSONObject), 
你的看起来有点不同:

onSuccess(int statusCode, Header[] headers, JSONArray allStock) 

您的api会为您提供JSONObject,而不是JSONArray