繁体   English   中英

Android Java将Json从URL解析为对象列表

[英]Android java parsing Json from url to object list

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

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

这是我的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);
    }
}

ResultClass ,我认为没有必要将constructur ResultClass包含在此处作为代码。

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

更改此行:

AsyncTask parkingInfoFetch = new AsyncFetch(this);

对此:

AsyncFetch parkingInfoFetch = new AsyncFetch(this);

该错误表示该行:

parkingInfoFetch.setOnResponse(this);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM