Android java解析Json从url到对象列表

时间:2015-04-12 11:01:07

标签: java android json parsing object

我想连接到Api网址,检索json并将所有内容存储在对象列表中。网址可以作为Json返回的Here is an example

我收到了以下代码,但在我的活动Cannot resolve method setOnResponse

中返回错误line 31

这是我的activity.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是什么意思,我该如何解决?

1 个答案:

答案 0 :(得分:1)

更改此行:

AsyncTask parkingInfoFetch = new AsyncFetch(this);

对此:

AsyncFetch parkingInfoFetch = new AsyncFetch(this);

错误表示行:

parkingInfoFetch.setOnResponse(this);

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