2016-04-30 7 views
0

Ich versuche, Endless Recycler View mit meiner Json Response zu implementieren.So laden Sie Json in Endless Recycler Veiw mit Nachrüstung

Dies ist mein Json Antwort Link

ich generieren meine Modelle mit jsonschema2pojo.org und ich laden die Daten in meinem recyclerview erfolgreich.

Aber ich muss endlos Recycler Ansicht implementieren:

Das ist mein RecyclerAdapter:

public class AparatAdapter extends RecyclerView.Adapter<AparatAdapter.ViewHolder> { 

    private Context context; 
    private ArrayList<Categoryvideo> categoryVideos; 

    //=============================constructor 
    public AparatAdapter(Context context, ArrayList<Categoryvideo> categoryVideos) { 
     this.context = context; 
     this.categoryVideos = categoryVideos; 
    } 
    //=============================viewholder 
    public class ViewHolder extends RecyclerView.ViewHolder{ 
     private TextView txtTitle ,txtCount ,txtSender ,txtDate; 
     private ImageView imgRow; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      txtTitle = (TextView)itemView.findViewById(R.id.txt_title_row); 
      txtCount = (TextView)itemView.findViewById(R.id.txt_count_dynamic_row); 
      txtSender = (TextView)itemView.findViewById(R.id.txt_sender_dynamic_row); 
      txtDate = (TextView)itemView.findViewById(R.id.txt_date_dynamic_row); 
      imgRow = (ImageView)itemView.findViewById(R.id.img_row); 
     } 
    } 

    //================================oncreateviewholder 

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

    //================================= onbindviewholder 

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

     holder.txtTitle.setText(categoryVideos.get(position).getTitle()); 
     holder.txtCount.setText(categoryVideos.get(position).getVisitCnt().toString()); 
     holder.txtSender.setText(categoryVideos.get(position).getSenderName()); 
     holder.txtDate.setText(categoryVideos.get(position).getSdate().toString()); 
     Glide.with(holder.itemView.getContext()).load(categoryVideos.get(position).getSmallPoster()) 
       .into(holder.imgRow); 
    } 

    //==================================getitemcount 

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

und das ist die Tätigkeit, bei der ich die json mit Retrofit, dass laden:

public class SargarmiActivity extends AppCompatActivity { 
    private RecyclerView recyclerView; 
    private AparatAdapter adapter; 
    private LinearLayoutManager layoutManager; 
    private ArrayList<Categoryvideo> categoryvideos; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_sargarmi); 
     initViews(); 
    } 
    //================================================= 

    private void initViews() { 
     recyclerView = (RecyclerView) findViewById(R.id.recycler_sargarmi); 
     recyclerView.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(SargarmiActivity.this); 
     recyclerView.setLayoutManager(layoutManager); 
     sendRequest(); 
    } 

    //================================================= 
    private void sendRequest() { 
     recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(layoutManager) { 
      @Override 
      public void onLoadMore(int page, int totalItemsCount) { 
       loadMore(); 
      } 
     }); 
     getData(); 
    } 



    //======================================================= 
    private void getData() { 
     //1 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl("http://www.aparat.com/etc/api/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     //2 
     ApiInterface request = retrofit.create(ApiInterface.class); 

     //3 
     Call<JSONResponse> call = request.getJsonResponse(); 

     //4 
     call.enqueue(new Callback<JSONResponse>() { 
      @Override 
      public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 
       if (response.isSuccessful()) { 
        JSONResponse jsonResponse = response.body(); 
        categoryvideos = new ArrayList<>(jsonResponse.getCategoryvideos()); 
        adapter = new AparatAdapter(SargarmiActivity.this, categoryvideos); 
        recyclerView.setAdapter(adapter); 

       } else { 
        Toast.makeText(SargarmiActivity.this, "Error darim else onresponse", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<JSONResponse> call, Throwable t) { 
       Toast.makeText(SargarmiActivity.this, "Error darim onFailure()", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    //=============== Load more Endless ===================== 
    private void loadMore() { 

    } 
} 

Wie Sie in json sehen können, meine Paginierung URL in ui Objekt eingebettet. und ich weiß nicht, was ich in die loadmore() Methode in meiner Tätigkeit schreiben sollte.

Antwort

0

Wenn Sie die Anfangslast von Kategorievideos herunterladen, wird auch ein Element aufgerufen: pagingForward. Dies enthält die URL zum Herunterladen der nächsten 20 Elemente.

Also, was Sie tun möchten, ist:

  1. Wenn die ersten Herunterladen von Videos, holen die pagingForward Wert und diese irgendwo speichern.

  2. Wenn Sie loadMore() aufrufen, machen Sie einen weiteren Download mit Retrofit mit der URL.

  3. Nachrüstung wird die Objekte herunterladen und Sie erhalten eine weitere pagingForward URL, die dann auf die nächsten 20 Elemente zeigt.

  4. Dies kann weitermachen, bis es keine weiteren Objekte sind (nicht sicher, wie die API respons dann, müssen Sie mit den Personen überprüfen, die die API geschrieben) zu holen