2017-05-22 13 views
1

サーバからデータを取得して、Recyclerviewに表示します。私はこのデータを表示することができますが、このデータを表示せずにprogressBarを表示することもあります。
このデータをLog.eに表示し、を速くと表示しますが、このデータをRecyclerViewに表示せず、進行状況を表示してください。
私の平均を知っている写真の下を参照してください:
Click too seeAndroidでRecyclerViewでデータを設定する方法

マイレスポンスコード:

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

アダプターコード:

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

どうすれば修正できますか?私を助けてください。 どうすれば修正できますか?助けてください

+0

を追加 、いくつかの回は、それがあるため、低速なネットワークのより多くの時間がかかり、logcatのデータを高速に表示する理由は、logcatであなただけの、どこの端末にデータを示しているということですリサイクルビューのようにUIがあり、すべてのデータが入力されるとデータが表示されます –

+0

@AbdulKawee、インターネット接続速度が遅いとLogCatにデータが表示されません!なぜlogcatに表示され、recyclerviewに表示されないのですか?どのように私はrecyclerviewにデータを表示するスピードアップできますか?手伝って頂けますか? – Dongle

+0

あなたのコードの行をループ内でチェックすると、レコードが受信されるとすぐにログに表示されるすべてのレコードが表示されます。リサイクラビューでは、データが完全に受信されたときにのみデータが表示されます –

答えて

0

よくお試しください。成功した応答でアダプタオブジェクトを初期化していません。それは、インターネットの接続速度に依存し、この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

私の友人に感謝しますが、私はonCreate metyhodでアダプタを初期化します。私の上記のコードでは、いくつかの時間データをrecyclerviewに表示し、時間を表示しません。いくつかの時間を表示し、いくつかの時間は表示されません!どうすれば修正できますか?時にはそれが迅速かつショー読み込むとき – Dongle

+0

このソリューションを試してみてください、あなたがするonSuccessにデータを持っている、どのようにのonCreate() –

+0

@Dongleに動作します、それを試して、コードを実行し、それが –

関連する問題