2017-07-11 2 views
0

Salut les gars, j'ai une vue de la carte qui peuplent ses données à partir d'un JSON. Je pars json avec volley et c'est un succès. mais vue de la carte il n'y a rien à montrerrecyclerview ne montre rien dans le fragment

ici est mon JSON

{"photo":[{"id":"4","profile_id":"mahdi","caption":"hello","image_url":"https:\/\/hemispheric-suggest.000webhostapp.com\/img\/img\/birjand.jpg","profile_img_url":"https:\/\/hemispheric-suggest.000webhostapp.com\/prof\/prof\/prof_1.jpg","insert_time":"2017-07-09 11:21:44"} 

et mon adaptateur fragment:

private RecyclerView recyclerView; 
private RequestQueue mRequestQueue; 
ArrayList<Card> list = new ArrayList<>(); 

String url = "My url"; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.frag,container,false); 
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler); 

    mRequestQueue = Volley.newRequestQueue(getActivity()); 

    list(); 

    LinearLayoutManager MyLayoutManager = new LinearLayoutManager(getActivity()); 
    MyLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    recyclerView.setAdapter(new Adapter(list)); 
    return view; 
} 


public class Adapter extends RecyclerView.Adapter<Adapter.MyviewHolder>{ 

    // private ArrayList<Card> list; 

    public Adapter(ArrayList<Card> data) { 
     list = data; 
    } 

    public class MyviewHolder extends RecyclerView.ViewHolder{ 

     public TextView textView; 
     public ImageView imageView; 
     public MyviewHolder(View itemView) { 
      super(itemView); 
      textView = (TextView) itemView.findViewById(R.id.textView); 
      imageView = (ImageView) itemView.findViewById(R.id.imageView); 
     } 
    } 

    @Override 
    public MyviewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_row,parent,false); 
     return new MyviewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(MyviewHolder holder, int position) { 

     Card card = list.get(position); 
     holder.textView.setText(card.getName()); 
     Glide.with(getActivity()).load(card.getImg()).into(holder.imageView); 

    } 



    @Override 
    public int getItemCount() { 
     return list.size(); 
    } 
} 

public void list() { 

    JsonObjectRequest object = new JsonObjectRequest(Request.Method.GET, url, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try{ 

         JSONArray array = response.getJSONArray("photo"); 
         for (int i = 0; i <array.length() ; i++) { 
          JSONObject temp = array.getJSONObject(i); 
          Card card = new Card(); 
          card.setName(temp.getString("profile_id")); 
          card.setImg(temp.getString("image_url")); 
          list.add(card); 
         } 


        }catch (Exception ex){ 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      } 
    ); 
    mRequestQueue.add(object); 
} 

}

remercient pour votre aide

Répondre

0

Volley est asynchronus, donc quand vous appelez:

recyclerView.setAdapter(new Adapter(list)); 

seulement quelques millisecondes après votre demande vous en file d'attente, il est très probable que la liste est encore vide car Volley n'a pas encore reçu de réponse. Vous devez définir votre adaptateur une fois que vous avez reçu la réponse dans le rappel onResponse.