Android java 解析 Json 从 url 到 object list



我想连接到一个 Api url,检索 json 并将所有内容存储在对象列表中。下面是 url 可以作为 JSON 返回的内容的示例。

以下代码已提供给我,但它在我的活动line 31中返回错误Cannot resolve method setOnResponse

这是我的活动.java

public class resultOverview_activity extends Activity implements onResponse{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result_overview);
        Bundle search_activity_data = getIntent().getExtras();
        if(search_activity_data == null){
            return;
        }
        String URL = "http://www.gw2spidy.com/api/v0.9/json/item-search/Sunrise";
        AsyncTask parkingInfoFetch = new AsyncFetch(this);
        parkingInfoFetch.setOnResponse(this);
        parkingInfoFetch.execute(URL);
        //Log.i("gw2Log", parkingInfoFetch.);

    }
    @Override
    public void onResponse(JSONObject object) {
        Log.d("Json Response", "Json Response" + object);
        ResultClass resultClass = new ResultClass();
        try {
            resultClass.setCount(object.getInt("count"));
            resultClass.setPage(object.getInt("page"));
            resultClass.setLast_page(object.getInt("last_page"));
            resultClass.setTotal(object.getInt("total"));
            JSONArray array = new JSONArray(object.getString("results"));
            for (int i = 0; i < resultClass.getTotal(); i++) {
                JSONObject resultsObject = array.getJSONObject(i);
                resultClass.setData_id(resultsObject.getInt("data_id"));
                resultClass.setName(resultsObject.getString("name"));
                resultClass.setRarity(resultsObject.getInt("rarity"));
                resultClass.setRestriction_level(resultsObject
                        .getInt("restriction_level"));
                resultClass.setImg(resultsObject.getString("img"));
                resultClass.setType_id(resultsObject.getInt("type_id"));
                resultClass.setSub_type_id(resultsObject.getInt("sub_type_id"));
                resultClass.setPrice_last_changed(resultsObject
                        .getString("price_last_changed"));
                resultClass.setMax_offer_unit_price(resultsObject
                        .getInt("max_offer_unit_price"));
                resultClass.setMin_sale_unit_price(resultsObject
                        .getInt("min_sale_unit_price"));
                resultClass.setOffer_availability(resultsObject
                        .getInt("offer_availability"));
                resultClass.setSale_availability(resultsObject
                        .getInt("sale_availability"));
                resultClass.setSale_price_change_last_hour(resultsObject
                        .getInt("sale_price_change_last_hour"));
                resultClass.setOffer_price_change_last_hour(resultsObject
                        .getInt("offer_price_change_last_hour"));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

AsyncFetch.java类

public class AsyncFetch extends AsyncTask<String, Void, JSONObject> {
    public AsyncFetch(Context context) {
        this.context = context;
    }
    private Context context;
    private JSONObject jsonObject;
    private onResponse onResponse;
    public onResponse getOnResponse() {
        return onResponse;
    }
    public void setOnResponse(onResponse onResponse) {
        this.onResponse = onResponse;
    }
    @Override
    protected JSONObject doInBackground(String... params) {
        // TODO Auto-generated method stub
        try {
            HttpGet get = new HttpGet(params[0]);
            HttpClient client = new DefaultHttpClient();
            HttpResponse response = client.execute(get);
            HttpEntity entity = response.getEntity();
            String result = EntityUtils.toString(entity);
            jsonObject = new JSONObject(result);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jsonObject;
    }
    @Override
    protected void onPostExecute(JSONObject result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        this.onResponse.onResponse(result);
    }
    public interface onResponse {
        public void onResponse(JSONObject object);
    }
}

当然,我认为没有必要将constructur ResultClass作为代码包含在这里。

此错误Cannot resolve method setOnResponse是什么意思,我该如何解决这个问题?

更改此行:

AsyncTask parkingInfoFetch = new AsyncFetch(this);

对此:

AsyncFetch parkingInfoFetch = new AsyncFetch(this);

错误表示该行:

parkingInfoFetch.setOnResponse(this);

正在尝试调用子类AsyncFetch中定义的方法,但是您将变量定义为父类AsyncTask,该父类没有方法setOnResponse

最新更新