亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 volley 從方法返回 ArrayList

使用 volley 從方法返回 ArrayList

三國紛爭 2022-10-07 16:21:18
我試圖返回 arrayList ,當我返回 arrayList 為空時。當我返回 arrayList 但它不起作用時,我將使用它。 public ArrayList<Cities> getCities(){    final ArrayList<Cities> cities=new ArrayList<>();    String url = "http://10.0.2.2:3000/cities";    mQueue = Volley.newRequestQueue(context);    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,            new Response.Listener<JSONObject>() {                @Override                public void onResponse(JSONObject response) {                    try {                        JSONArray jsonArray = response.getJSONArray("city");                        for (int i = 0; i < jsonArray.length(); i++) {                            JSONObject city = jsonArray.getJSONObject(i);                            String id = city.getString("_id");                            String name = city.getString("name");                            Cities p=new Cities(id,name);                            cities.add(p);                        }                    } catch (JSONException e) {                        e.printStackTrace();                    }                }            }, new Response.ErrorListener() {        @Override        public void onErrorResponse(VolleyError error) {            error.printStackTrace();        }    });    mQueue.add(request);return cities;}
查看完整描述

2 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

如果您的響應返回一個帶有城市元素數組的 JSONObject,那么您的請求是正確的,但如上所述,在調用回調之前,您不能期望實際得到結果。這是一個使用返回 JSONArray 的 JSONArrayRequest 的示例,但在您從 JSONObject 中提取 City 數組后,其工作方式與您的幾乎相同。


    private ListView mTripList;

public ArrayList<TripItem> tripItems;

private JSONArray unclaimedTrips;

private TripSelectAdapter adapter;




public void getTrips() {


        JsonArrayRequest req = new JsonArrayRequest(url, new Response.Listener<JSONArray> () {  


        @Override

        public void onResponse(JSONArray response) {


            // Public Array

            unclaimedTrips = response;


            tripItems = new ArrayList<TripItem>();



            // Optional if you want to manipulate the data in some way

            if (unclaimedTrips != null) {


                for (int i = 0; i < unclaimedTrips.length(); i++) {


                    try {

                        JSONObject item = unclaimedTrips.getJSONObject(i);


                        int tripID = item.getInt("trip_id");

                        int claimID = item.getInt("claim_id");

                        String payrollCode = item.getString("payroll_code");

                        String tripDate = item.getString("trip_date");

                        String tripPurpose = item.getString("trip_purpose");


                        TripItem tripItem = new TripItem(tripID, claimID, payrollCode, tripDate, tripPurpose);


                        tripItems.add(tripItem);


                    } catch (JSONException e) {

                        e.printStackTrace();

                    }

                }


                refreshData();

            }


        }



    }, new Response.ErrorListener() {

        @Override

        public void onErrorResponse(VolleyError error) {

            unclaimedTrips = null;

            refreshData();


        }

    }) {


       @Override

       public Map<String, String> getHeaders() throws AuthFailureError {

           HashMap<String, String> headers = new HashMap<String, String>();

                headers.put("Accept", "application/json");

                headers.put("Content-Type", "application/json");

           return headers;

       };

    };



    // add the request object to the queue to be executed

    MyApplication.getInstance().addToRequestQueue(req);

}



public void refreshData() {


    if (tripItems.isEmpty()) {

        mEmptyList.setVisibility(android.view.View.VISIBLE);

    } else {

        mEmptyList.setVisibility(android.view.View.GONE);                   

    }


    adapter = new TripSelectAdapter(this, thisContext, tripItems);

    mTripList.setAdapter(adapter);

}


查看完整回答
反對 回復 2022-10-07
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您的問題是您正在嘗試返回尚未填充的內容,該調用是異步的,因此可能需要一些時間才能將日期填充到您的ArrayList<Cities>中,這就是它為空的原因。

您應該刪除此行return cities;并記住在您的方法之外創建它final ArrayList<Cities> cities=new ArrayList<>();,并刪除返回ArrayList<Cities>到 a void。

然后,您可以創建一個回調來通知數據已填充到您ArrayList<Cities>的.RecyclerViewonResponse()

要進行回調,您可以查看此答案或此Gist


查看完整回答
反對 回復 2022-10-07
  • 2 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號