2017-05-22 1 views
1

Je veux obtenir des données du serveur et le montrer dans Recyclerview. Je peux montrer ces données, mais un certain temps ne montre pas ces données et montre simplement progressBar.
Je montre ces données dans Log.e et montre rapidement, mais ne montre pas ces données dans RecyclerView et montre simplement Progress.
S'il vous plaît voir image ci-dessous pour connaître ma moyenne:
Click too seeComment définir des données dans RecyclerView sur Android

Mes codes de réponse:

InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class); 
Call<CountryResponse> call = api.getCountryList(); 

call.enqueue(new Callback<CountryResponse>() { 
    @Override 
    public void onResponse(Call<CountryResponse> call, Response<CountryResponse> response) { 
     try { 
      if (response.body() != null) { 
       models.clear(); 
       models.addAll(response.body().getData()); 
       for (int i = 0; i <= models.size(); i++) { 
        Log.e("CountryInfoTAG", response.body().getData().get(i).getId() + " : " + 
          response.body().getData().get(i).getName()); 
       } 

       countryProgress.setVisibility(View.GONE); 
       countryRecycler.setAdapter(mAdapter); 
      } 
     } catch (Exception e) { 
     } 
    } 

    @Override 
    public void onFailure(Call<CountryResponse> call, Throwable t) { 
     Toasty.error(context, context.getResources().getString(R.string.failRequest), 
       Toast.LENGTH_LONG, true).show(); 
    } 
}); 

codes Adaptateur:

public class CountryAdapter extends RecyclerView.Adapter { 

    private List<CountryDatum> mData; 
    private Context context; 
    private sendDataListener listner; 

    public CountryAdapter(List<CountryDatum> mData, Context context, sendDataListener listner) { 
     this.mData = mData; 
     this.context = context; 
     this.listner = listner; 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     RecyclerView.ViewHolder vh; 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_country, parent, false); 
     vh = new DataViewHolder(v); 

     return vh; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     if (holder instanceof DataViewHolder) { 
      ((DataViewHolder) holder).countryListTxt.setText(mData.get(position).getName() + ""); 
      ((DataViewHolder) holder).countryListTxt.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        listner.onSendIdName(mData.get(position).getId(), mData.get(position).getName()); 

        if (context instanceof RegisterActivity) { 
         ((RegisterActivity) context).dismissCountryDialog(); 
        } 
       } 
      }); 
     } 
    } 

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

    public void add(List<CountryDatum> models) { 
     mData.addAll(models); 
     notifyDataSetChanged(); 
    } 

    public void clear() { 
     mData.clear(); 
     notifyDataSetChanged(); 
    } 

    public class DataViewHolder extends RecyclerView.ViewHolder { 
     private TextView countryListTxt; 

     public DataViewHolder(View itemView) { 
      super(itemView); 

      countryListTxt = (TextView) itemView.findViewById(R.id.countryNameTxt); 
     } 
    } 
} 

Comment puis-je résoudre ce problème? Aidez-moi, s'il vous plaît. Comment puis-je résoudre ce problème? aidez-moi s'il vous plaît

+0

cela dépend de la vitesse de connexion Internet, quelques fois il prend plus de temps en raison du réseau lent, et la raison pour l'affichage rapide des données dans logcat est que dans logcat vous êtes juste montrer des données dans le terminal, où comme dans la vue recycleur il y a une interface utilisateur, et il affichera des données lorsque toutes les données sont peuplées –

+0

@AbdulKawee, si la vitesse de la connexion Internet est lente ne montre pas les données dans LogCat! pourquoi montrer dans logcat et ne pas montrer dans recyclerview? Comment puis-je accélérer l'affichage des données dans recyclerview? Pouvez-vous m'aider? – Dongle

+0

Vérifiez la ligne de votre code dans la boucle, c'est-à-dire avec chaque enregistrement que le journal affichera dès que l'enregistrement est reçu, où comme dans la vue recycleur, il affichera uniquement les données quand il est complètement reçu –

Répondre

0

Bien Essayez ceci, vous n'initialisez pas l'objet d'adaptateur dans la réponse de succès. Ajouter cette mAdapter = new CountryAdapter(models,getActivity(),listener);

@Override 
    public void onResponse(Call<CountryResponse> call, Response<CountryResponse> response) { 
     try { 
      if (response.body() != null) { 
       models.clear(); 
       models.addAll(response.body().getData()); 
       for (int i = 0; i <= models.size(); i++) { 
        Log.e("CountryInfoTAG", response.body().getData().get(i).getId() + " : " + 
          response.body().getData().get(i).getName()); 
       } 

       countryProgress.setVisibility(View.GONE); 
       mAdapter = new CountryAdapter(models,getActivity(),listener); 
       countryRecycler.setAdapter(mAdapter); 
      } 
     } catch (Exception e) { 
     } 
    } 
+0

Merci mon ami, mais j'initialise l'adaptateur dans onCreate metyhod. dans mes codes ci-dessus montrent quelques données de temps dans recyclerview et ne montrent pas un certain temps. un spectacle de temps et un certain temps ne pas montrer !!! comment puis-je le réparer? – Dongle

+0

l'essayer, et exécutez le code, il travaillera –

+0

@Dongle, vous avez des données dans onSuccess, comment pouvez-vous initialiser l'adaptateur dans onCreate() –