2016-08-29 1 views
0

Я использую Realm, и я создал интерфейс для синтаксического анализа RealmObject в моем переходнике для реализации в деятельности, но я получаю эту ошибкуПопытка доступа Realm объекта из интерфейса

**Object is no longer valid to operate on. Was it deleted by another thread?** 

Это мой код ниже ,

NewsAdapter.java

public class TestNewsAdapter extends RealmBaseRecyclerViewAdapter<NewsTrend, TestNewsAdapter.PostsViewHolder> { 

public RealmResults<NewsTrend> realmResults; 
public Context context; 
public EventListener eventListener; 
static String fbid; 
private User user; 

boolean isFav; 



public TestNewsAdapter(Context context, RealmResults<NewsTrend> realmResults, 
         boolean automaticUpdate, User user) { 
    super(context, realmResults, automaticUpdate); 
    this.realmResults = realmResults; 
    this.context = context; 
    this.user = user; 
} 

public void setEventListener(EventListener eventListener) { 
    this.eventListener = eventListener; 
} 

@Override 
public PostsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    fbid = user.getId(); 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_news, viewGroup, false); 
    PostsViewHolder mediaViewHolder = new PostsViewHolder(v); 
    return mediaViewHolder; 
} 

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

    final NewsTrend postsData = getItem(position); 

    holder.itemView.setTag(postsData); 

    String eventName = postsData.getTitle(); 
    String eventDate = postsData.getTimestamp(); 
    holder.sourceName.setText(postsData.getType()); 
    Spanned decodedTitle = Html.fromHtml(eventName); 

    holder.tvCountPageView.setText(postsData.getRead_count() + " Views"); 
    holder.tvNewsCountLike.setText(""+ postsData.getLike_count()); 

    holder.tvNewsTitle.setText(decodedTitle); 
    holder.tvNewsDate.setText(getSplitDate(eventDate)); 
    String text = postsData.getContent() + "<font color='red'> <strong>More...</strong></font>"; 
    holder.tvNewsShortText.setText(Html.fromHtml(text), TextView.BufferType.SPANNABLE); 

    if (postsData.getType().equals("Bella Naija")) { 
     holder.sourceImg.setImageResource(R.drawable.bella); 
    } else if (postsData.getType().equals("Punch")) { 
     holder.sourceImg.setImageResource(R.drawable.punch); 
    } else if (postsData.getType().equals("Linda Ikeji")) { 
     holder.sourceImg.setImageResource(R.drawable.lib); 
    } else if (postsData.getType().equals("Pulse")) { 
     holder.sourceImg.setImageResource(R.drawable.pulse_logo); 
    } 
    // holder.sourceName.setText(postsData.getType()); 

    Glide.with(context) 
      .load(postsData.getImage()) 
      .centerCrop() 
      .placeholder(R.drawable.tw_logo) 
      .into(holder.ivNewsImage); 



    if (postsData.getLike_status() == 1) { 
     holder.ivLike.setImageResource(R.drawable.kalp_dolu_kucuk); 
    } else { 
     holder.ivLike.setImageResource(R.drawable.kalp_bos_kucuk); 
    } 


    if (postsData.getArch_status() == 1) { 
     Log.d("logFavourite", String.valueOf(postsData.getLike_status())); 
     holder.ivFavorite.setImageResource(R.drawable.yildiz_dolu_kucuk); 
     this.isFav = true; 
    } else { 
     holder.ivFavorite.setImageResource(R.drawable.yildiz_bos_kucuk); 
     this.isFav = false; 
    } 

    holder.llRight.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      eventListener.onItemClick(v, postsData); 
     } 
    }); 


    holder.ivShare.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String shareBody = postsData.getHref(); 

      Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
      sharingIntent.setType("text/plain"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Trending App"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 
      context.startActivity(Intent.createChooser(sharingIntent, "Paylaş")); 
     } 
    }); 

    holder.ivFavorite.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      eventListener.onFavClick(v,postsData,holder.ivFavorite, isFav); 
     } 
    }); 

    holder.ivLike.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      eventListener.onLikeClick(v, postsData, holder.tvNewsCountLike, holder.ivLike); 
     } 
    }); 

} 




@Override 
public NewsTrend getItem(int i) { 
    return realmResults.get(i); 
} 

public void swapData(RealmResults<NewsTrend> realmResults) { 
    this.realmResults = realmResults; 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

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

public static class PostsViewHolder extends RecyclerView.ViewHolder { 

    public RobotoTextView tvNewsDate; 
    public RobotoTextView tvNewsTitle; 
    public RobotoTextView tvNewsShortText; 
    public RobotoTextView sourceName; 
    public ImageView sourceImg; 

    RelativeLayout postContentHolder; 



    public LinearLayout llLeft; 
    public LinearLayout llRight; 

    public ImageView ivArrowLeft; 
    public ImageView ivArrowRight; 

    public ImageView ivNewsImage; 

    public ImageView ivShare; 

    public ImageView ivFavorite; 
    public ImageView ivLike; 

    public TextView tvCountPageView; 
    public TextView tvNewsCountLike; 

    PostsViewHolder(View itemView) { 
     super(itemView); 
     postContentHolder = (RelativeLayout) itemView.findViewById(R.id.postContentHolder); 
     ivNewsImage = (ImageView) itemView.findViewById(R.id.ivNewsImage); 
     ivArrowLeft = (ImageView) itemView.findViewById(R.id.ivArrowLeft); 
     ivArrowRight = (ImageView) itemView.findViewById(R.id.ivArrowRight); 
     llLeft = (LinearLayout) itemView.findViewById(R.id.llLeft); 
     llRight = (LinearLayout) itemView.findViewById(R.id.llRight); 

     ivShare = (ImageView) itemView.findViewById(R.id.ivShare); 
     sourceImg = (ImageView) itemView.findViewById(R.id.sourceImg); 
     sourceName = (RobotoTextView) itemView.findViewById(R.id.sourceName); 
     tvNewsTitle = (RobotoTextView) itemView.findViewById(R.id.tvNewsTitle); 
     tvNewsShortText = (RobotoTextView) itemView.findViewById(R.id.tvNewsShortText); 
     tvNewsDate = (RobotoTextView) itemView.findViewById(R.id.tvNewsDate); 

     ivFavorite = (ImageView) itemView.findViewById(R.id.ivFavorite); 
     ivLike = (ImageView) itemView.findViewById(R.id.ivLike); 

     tvNewsCountLike = (TextView) itemView.findViewById(R.id.tvNewsCountLike); 
     tvCountPageView = (TextView) itemView.findViewById(R.id.tvCountPageView); 

    } 
} 

public interface EventListener { 
    void onItemClick(final View view, NewsTrend postsData); 

    void onLikeClick(final View view, NewsTrend postsDAta, TextView tvNewsCountLike, 
        ImageView ivLike); 

    void onFavClick(final View view, NewsTrend postData, ImageView ivArchive, boolean isArchive); 

} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

public String getSplitDate(String dateString){ 

    return dateString; 
    } 
} 

Тогда реализация в классе Фрагмент

@Override 
public void onLikeClick(View view, NewsTrend postData, TextView tvNewsCountLike, 
         ImageView ivLike) { 
    if (!postData.isChecked()) { 
     realm.beginTransaction(); 
     postData.setChecked(true); 
     realm.commitTransaction(); 
     tvNewsCountLike.setText("" + (Integer.parseInt(tvNewsCountLike.getText().toString()) + 1)); 
     ivLike.setImageResource(R.drawable.kalp_dolu_kucuk); 
    } else { 
     realm.beginTransaction(); 
     postData.setChecked(false); 
     realm.commitTransaction(); 
     tvNewsCountLike.setText("" + (Integer.parseInt(tvNewsCountLike.getText().toString()) - 1)); 
     ivLike.setImageResource(R.drawable.kalp_bos_kucuk); 
    } 
    adapter.notifyDataSetChanged(); 
    like(postData.getNews_id()); 
} 

postsData в возвращений интерфейса,

Объект больше не действует работать на. Удалился ли он другим потоком?

+0

Какова ваша королевская версия? – EpicPandaForce

+0

io.realm: realm-android: 0.85.0 – SimpiMind

+0

Любая причина, по которой вы никогда не обновлялись, по крайней мере, до 0,87.5? Он не использует плагин Gradle (введенный в 0.88.0) и еще не имел кучу изменений, и он намного более стабилен. – EpicPandaForce

ответ

0

Я был в состоянии решить эту проблему путем обновления Realm от

io.realm:realm-android:0.85.0 

к текущей версии с помощью класса плагина.

Смежные вопросы