Получить данные с помощью Retrofit и Sugar ORM (сделать закладку кнопкой) - PullRequest
0 голосов
/ 27 октября 2018

Привет всем. У меня новостное приложение для университета, и у меня возникла проблема с отображением сохраненных данных в другой деятельности. Я m using retrofit to get data from internet and Sugar ORM to save data localy. So, news are displaying great and I created a CardView where it has a button "Read Later". The method to save data into database s working (at least on log it shows that it is working) but I can могу получить сохраненные данные для операции read_later. У меня есть Адаптер, который содержит onBindViewHolder.

@Override
public void onBindViewHolder(@NonNull MainArticalAdapter.ViewHolder viewHolder, int position) {
    final Article articleModel = articleArrayList.get(position);
    if(!TextUtils.isEmpty(articleModel.getTitle())){
        viewHolder.titleText.setText(articleModel.getTitle());
    }
    if(!TextUtils.isEmpty(articleModel.getDescription())) {
        viewHolder.descriptionText.setText(articleModel.getDescription());
    }
    if(!TextUtils.isEmpty(articleModel.getUrlToImage())){
        Picasso.get().load(articleModel.getUrlToImage())
                .resize(700,500)
                .centerInside()
                .into(viewHolder.imgView);
    }
    viewHolder.artilceAdapterParentLinear.setTag(articleModel);
    Button btn = viewHolder.btn_read_later;
    btn.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Article art = new Article();
                    art.setAuthor("Harun Shaban");
                    art.save();
                }
            }
    );

}

и видоискатель, который расширяет RecyclerView.ViewHolder

public class ViewHolder extends RecyclerView.ViewHolder {
    private TextView titleText, descriptionText;
    private LinearLayout artilceAdapterParentLinear;
    private ImageView imgView;
    private Button btn_read_later;
    public ViewHolder(@NonNull View view) {
        super(view);
        btn_read_later = view.findViewById(R.id.button_read_later);
        imgView = view.findViewById(R.id.article_adapter_image_view);
        titleText = view.findViewById(R.id.article_adapter_tv_title);
        descriptionText = view.findViewById(R.id.article_adapter_tv_description);
        artilceAdapterParentLinear = view.findViewById(R.id.article_adapter_ll_parent);
        artilceAdapterParentLinear.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if(onRecyclerViewItemClickListener != null){
                            onRecyclerViewItemClickListener.onItemClick(getAdapterPosition(),view);
                        }
                    }
                }
        );
    }
}

, и это в моем классе MainActivity, который содержит метод для отображения всех данных, полученных из Интернета путем модернизации

private void showData(){
    // Second step to create the recycler view to show the data taken
    final RecyclerView mainRecycler = findViewById(R.id.activity_main_tv);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    mainRecycler.setLayoutManager(linearLayoutManager);

    // First step to create the response
    final APIInterface apiService = ApiClient.getClient().create(APIInterface.class);
    Call<ResponeModel> call = apiService.getLatestNews("techcrunch", API_KEY);

    //third step
    call.enqueue(new Callback<ResponeModel>() {
        @Override
        public void onResponse(Call<ResponeModel> call, Response<ResponeModel> response) {
            if(response.body().getStatus().equals("ok")){
                List<Article> articleList = response.body().getArticles();
                if(articleList.size()>0){
                    final MainArticalAdapter mainArticalAdapter = new MainArticalAdapter(articleList);
                    mainArticalAdapter.setOnRecyclerViewItemClickListener(MainActivity.this);
                    mainRecycler.setAdapter(mainArticalAdapter);
                }
            }
        }

        @Override
        public void onFailure(Call<ResponeModel> call, Throwable t) {
            Log.e("on Fail", t.toString());
        }
    });
}

Я пытался работать с той же логикой в ​​Read_later_Activity, но она вылетала. Это моя Read_later_activity…

    public void getDatafromDB() {
    List <Article> savedArticles = Article.listAll(Article.class);

    final RecyclerView read_later_recView = findViewById(R.id.activity_read_later_tv);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    read_later_recView.setLayoutManager(linearLayoutManager);

    if(savedArticles.size()>0){
        final MainArticalAdapter mainArticalAdapter = new MainArticalAdapter(savedArticles);
        mainArticalAdapter.setOnRecyclerViewItemClickListener((OnRecyclerViewItemClickListener) ReadLaterActivity.this);
        read_later_recView.setAdapter(mainArticalAdapter);

        //to retrieve the data from DB, by id (crashes)
        //Article art = Article.findById(Article.class, 0);
        //titleText_readLater.setText(art.getTitle());
/*Don`t know what to do*/
    }
}
...