Adapter.notifyDataSetChanged()无法在onCreate()

时间:2017-12-24 10:36:03

标签: java android recycler-adapter

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

我正在使用向量存储已解析的数据,并在填充向量后在adapter.notifyDataSetChanged()内调用onCreate()。但是没有变化。

如果我在adapter.notifyDataSetChanged() try-catchgetData()内呼叫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); } } ,那么它运行正常。为什么呢?

[Authorize(Roles = "Admin")]

1 个答案:

答案 0 :(得分:2)

你无法做到这一点,没有任何凌空使用的网络请求本质上是异步的,所以网络请求被放入队列并且代码继续执行notifyadapter改变的方法。之后发生对网络调用的响应并添加数据,你应该通过在响应方法中的内部调用它来接收数据后调用该方法