gpt4 book ai didi

java - Adapter.notifyDataSetChanged() 在 onCreate() 内部不工作

转载 作者:行者123 更新时间:2023-11-29 19:03:43 25 4
gpt4 key购买 nike

我正在尝试使用 Volley 解析 JSON。

我正在使用 vector 来存储已解析的数据,并在填充 vector 后在 onCreate() 中调用 adapter.notifyDataSetChanged()。但没有任何变化。

如果我在 getData()try-catch block 中调用 adapter.notifyDataSetChanged() 那么它工作正常。为什么?

public class MainActivity extends AppCompatActivity{

Vector<Data> ve;
private Adapter adapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(RecyclerView)findViewById(R.id.main_recycler_view);
ve=new Vector<Data>();
adapter=new Adapter(ve);
RecyclerView.LayoutManager lm=new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(lm);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);

getData(ve);
adapter.notifyDataSetChanged(); //not working
}
public void getData(final Vector<Data> ve)
{
String url = "https://api.androidhive.info/contacts/";
StringRequest request = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String jsonString) {
try
{
JSONObject object = new JSONObject(jsonString);
JSONArray arr = object.getJSONArray("contacts");
int len=arr.length();
JSONObject obj;
for (int i = 0; i < len; i++)
{
obj = arr.getJSONObject(i);
ve.add(new Data(obj.getString("name"), obj.getString("email"));

}
//adapter.notifyDataSetChanged();working
}
catch (JSONException e)
{
Toast.makeText(getApplicationContext(),"JSON Parsing Exception",Toast.LENGTH_LONG);
e.printStackTrace();
}

}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getApplicationContext(), "Some error occurred!!", Toast.LENGTH_SHORT).show();

}
});
RequestQueue rQueue = Volley.newRequestQueue(this);
rQueue.add(request);

}

}

最佳答案

你不能那样做,因为 nothing volley 使用了本质上被设计为异步的网络请求,所以网络请求被放入队列并且代码继续执行 notifyadapter changed 方法。对网络调用的响应发生在之后并添加数据,您应该在接收到数据后调用该方法,在响应方法的 volley 中调用它

关于java - Adapter.notifyDataSetChanged() 在 onCreate() 内部不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47959843/

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