Get Data with Retrofit and Sugar ORM (make bookmark button)

172 Views Asked by At

Hello everyone I am doing a news app for university and I have kind of problem with displaying saved data to another activity. Im 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 cant get saved data to read_later activity. Alos I have an Adapter which contains 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();
                }
            }
    );

}

and viewholder which extends 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);
                        }
                    }
                }
        );
    }
}

and this is in my MainActivity class which contains a method to display all data received from internet by retrofit

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

I tried to work with same logic in Read_later_Activity but it crashes. This is my 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*/
    }
}
0

There are 0 best solutions below