2017-08-28 6 views
1

J'ai un problème avec Volley et le RecyclerView.RecyclerView le remplir avec une demande Volley ne montre pas les résultats

Dans la onCreate Méthode de mon Activity, j'appelle un Volley Request pour obtenir des données de mon serveur. Je le passe ensuite à mon adaptateur en tant que List. Le fait est que tout se passe si vite lorsque la méthode onCreate est terminée mon Volley Request n'est pas encore fini, donc rien ne s'affiche à l'écran, comment puis-je éviter cela?

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); 


    } 

Répondre

3

Dans la méthode add, qui je pense est l'ajout d'un élément au tableau d'éléments de l'adaptateur, vous devez faire notifyDatasetChanged() ou vous pouvez le faire:

... 
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

brillant! Merci. – JosCarrillo