2016-08-29 2 views
0

I Realm verwenden, und ich erstellt eine Schnittstelle RealmObject in meinem Adapter zu analysieren in einer Aktivität umgesetzt werden, aber ich bekomme diese FehlermeldungVersuch Realm Objekt von einer Schnittstelle für den Zugriff auf

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

Dies ist mein Code unten .

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

die Implementierung in der Klasse Fragment Dann

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

die postsData in der Schnittstelle zurückgibt,

Objekt ist nicht mehr gültig zu betreiben. Wurde es von einem anderen Thread gelöscht?

+0

Was ist Ihre Realm-Version? – EpicPandaForce

+0

io.realm: realm-android: 0.85.0 – SimpiMind

+0

Gibt es einen Grund, warum Sie nie auf mindestens 0.87.5 aktualisiert haben? Es verwendet nicht das Gradle-Plugin (eingeführt in 0.88.0) und hatte noch nicht eine Reihe von Breaking-Änderungen, und es ist viel stabiler. – EpicPandaForce

Antwort

0

ich in der Lage gewesen, das Problem zu lösen, indem Realm von

io.realm:realm-android:0.85.0 

auf die aktuelle Version unter Verwendung von Klasse-Plugin aktualisieren.

Verwandte Themen