gpt4 book ai didi

java - 无法将数据绑定(bind)到recyclerView中

转载 作者:行者123 更新时间:2023-12-02 09:12:53 24 4
gpt4 key购买 nike

我使用 URL 中的 GET 请求获取值。当我尝试将值绑定(bind)到 RecyclerView 时,我得到一个空值。从 getValue() 方法中,它返回 null 'si' 值。为什么?

public class ShipmentLists extends 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;
}

最佳答案

client.newCall(request).enqueue(new Callback()

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

参见this

这个question and answers给出一些关于异步的想法

关于java - 无法将数据绑定(bind)到recyclerView中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com