2017-08-28 54 views
1

我遇到了問題VolleyRecyclerViewRecyclerView用Volley請求填充它不顯示結果

onCreate方法我的Activity,我打電話Volley Request從我的服務器獲取數據。然後我將它作爲List傳遞給我的適配器。

事情是,當onCreate方法完成時,所有事情都發生得很快我的Volley Request尚未完成,因此屏幕上沒有顯示任何內容,我該如何避免這種情況?

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity__services__worker); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle("Servicios"); 
     final List services = new ArrayList(); 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    StringRequest stringRequest = new StringRequest(Method.GET, AppConfig.URL_GET_SERVICES_REQUIRED, new Response.Listener<String>(){ 
     @Override 
     public void onResponse(String response){ 
      try{ 
       JSONArray jsonArray = new JSONArray(response); 
       for(int i=0; i<jsonArray.length(); i++){ 
        JSONObject jsonObject = jsonArray.getJSONObject(i); 
        String tag_servicio = jsonObject.getString("contratista"); 
        String servicio = jsonObject.getString("descipcion_del_problema"); 
        String zona = jsonObject.getString("zona"); 
        String money = jsonObject.getString("precio_min"); 
        //Toast.makeText(Activity_Services_Worker.this, tag_servicio+servicio+zona+money, Toast.LENGTH_SHORT).show(); 
        services.add(new Servicios_worker(tag_servicio, servicio, zona, money)); 
       } 
      }catch (JSONException e){ 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener(){ 
     @Override 
     public void onErrorResponse (VolleyError error){ 
      Log.e(TAG, "Registration Error: " + error.getMessage()); 
      Toast.makeText(Activity_Services_Worker.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
    requestQueue.add(stringRequest); 



    recycler = (RecyclerView) findViewById(R.id.servicesAsked_RecyclerView); 
    recycler.setHasFixedSize(true); 

    lManager = new LinearLayoutManager(this); 
    recycler.setLayoutManager(lManager); 

    adapter = new Adapter_services_required(services); 
    recycler.setAdapter(adapter); 


    } 

回答

3

在add方法,我認爲這是增加了適配器的元素的數組中的元素,你應該做notifyDatasetChanged()或者你可以這樣做:

... 
final List services = new ArrayList(); 

;; CHANGED 
recycler = (RecyclerView) findViewById(R.id.servicesAsked_RecyclerView); 
recycler.setHasFixedSize(true); 

lManager = new LinearLayoutManager(this); 
recycler.setLayoutManager(lManager); 

adapter = new Adapter_services_required(services); 
recycler.setAdapter(adapter); 

RequestQueue requestQueue = Volley.newRequestQueue(this); 
StringRequest stringRequest = new StringRequest(Method.GET, AppConfig.URL_GET_SERVICES_REQUIRED, new Response.Listener<String>(){ 
    @Override 
    public void onResponse(String response){ 
     try{ 
      JSONArray jsonArray = new JSONArray(response); 
      for(int i=0; i<jsonArray.length(); i++){ 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       String tag_servicio = jsonObject.getString("contratista"); 
       String servicio = jsonObject.getString("descipcion_del_problema"); 
       String zona = jsonObject.getString("zona"); 
       String money = jsonObject.getString("precio_min"); 
       //Toast.makeText(Activity_Services_Worker.this, tag_servicio+servicio+zona+money, Toast.LENGTH_SHORT).show(); 
       services.add(new Servicios_worker(tag_servicio, servicio, zona, money)); 
       ;; CHANGED 
       adapter.notifyDatasetChanged(); 
      } 
     }catch (JSONException e){ 
      e.printStackTrace(); 
     } 
    } 
}, new Response.ErrorListener(){ 
    @Override 
    public void onErrorResponse (VolleyError error){ 
     Log.e(TAG, "Registration Error: " + error.getMessage()); 
     Toast.makeText(Activity_Services_Worker.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
}); 
requestQueue.add(stringRequest); 
+0

輝煌!謝謝。 – JosCarrillo