无法将数据绑定到recyclerView

问题描述 投票:0回答:1

我正在使用URL的GET请求获取值。当我尝试将值绑定到RecyclerView时,我得到了空值。从getValue()方法中,它返回空的“ si”值。为什么?

公共类ShipmentLists扩展了AppCompatActivity {

List<ShipmentInfo> si;
RecyclerView recList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recycler_lists);
    si = new ArrayList<>();
    recList = (RecyclerView) findViewById(R.id.cardList);
    LinearLayoutManager lim = new LinearLayoutManager(ShipmentLists.this);
    lim.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setHasFixedSize(true);
    recList.setLayoutManager(lim);
    ShipmentAdapter sa = new ShipmentAdapter(ShipmentLists.this, getData());
    sa.notifyDataSetChanged();
    recList.setAdapter(sa);
}

private List<ShipmentInfo> getData() {
    String url = "URL HERE";
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder().url(url).header("Accept", "application/json")
            .header("Content-Type", "application/json").build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            String mMessage = e.getMessage().toString();
            Log.w("failure Response", mMessage);
            call.cancel();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {

            String mMessage = response.body().string();

            try {
                final JSONArray myResponse = new JSONArray(mMessage);
                for (int i = 0; i < myResponse.length(); i++) {

                    String receiver = myResponse.getJSONObject(i).getString("receivername");
                    String address = myResponse.getJSONObject(i).getString("AddressLine1");
                    String city = myResponse.getJSONObject(i).getString("city");
                    String phone = myResponse.getJSONObject(i).getString("contactnumber");
                    String shipmentDate = myResponse.getJSONObject(i).getString("date");
                    String status = myResponse.getJSONObject(i).getString("status");
                    si.add(new ShipmentInfo(receiver, address, city, shipmentDate, phone, status));
                    Log.e("SI DATA", "" + si.size());
                }


            } catch (JSONException e) {
                e.printStackTrace();
            }

            Log.e("RESULTS ARE", "" + mMessage);
        }
    });
    Log.e("LIST SIZE",""+si.size());
    return si;
}
java android android-recyclerview okhttp
1个回答
0
投票
client.newCall(request).enqueue(new Callback()

asynchronous call。这意味着它将在单独的线程中同时执行。因此si在添加响应之前将返回null

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.