Ошибка приведения для баннерной рекламы с переработчиком - PullRequest
0 голосов
/ 23 сентября 2019

Я инициализирую рекламные баннеры в программе recyclerview, но я сталкиваюсь с ошибкой. Ошибка выглядит следующим образом: java.lang.ClassCastException: com.app.sliderandrecyclerview.RcModel не может быть приведен к com.google.android.gms.ads.AdView на com.app.sliderandrecyclerview.RcHolder.onBindViewHolder (RcHolder.java:59) "

RCVIEW.java

    setContentView(R.layout.activity_recycler_view);

    recyclerView = findViewById(R.id.recycelerview);
    tDatabase = FirebaseDatabase.getInstance();
    tReference = tDatabase.getReference("TERM");
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    MobileAds.initialize(this,"ca-app-pub- 
    3940256099942544~3347511713");

    tReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot 
         dataSnapshot) {

            for (DataSnapshot qu : dataSnapshot.getChildren()){
                RcModel v = qu.getValue(RcModel.class);
                rcList.add(v);
            }
           adapter = new RcHolder(getApplicationContext(),rcList);
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }

        @Override
     public void onCancelled(@NonNull DatabaseError databaseError) 
     {
    Toast.makeText(getApplicationContext(),"Check your Internet 
    Connection",Toast.LENGTH_SHORT).show();
        }
    });
    Item();
    getBannerAds();
    loadBannerAds();
   }

 private void Item(){
    List<RcModel> rcmodel = new ArrayList<>();

    for (RcModel rc : rcmodel){
        rcList.add(rc);
    }
  }

 private void getBannerAds(){
    for (int i = 0; i<rcList.size(); i+= ITEM_PER_ADS){
        final AdView adView = new AdView(RCVIEW.this);
        adView.setAdSize(AdSize.BANNER);
        adView.setAdUnitId(ADS);
        rcList.add(i,adView);
    }
  }

  private void loadBannerAds(){
    for (int i = 0; i<rcList.size(); i++){
        Object item = rcList.get(i);
        if (item instanceof AdView){
            final AdView adView = (AdView) item;
            adView.loadAd(new AdRequest.Builder().build());
        }
       }
     }
     }

RCVIEW.xml

   <androidx.constraintlayout.widget.ConstraintLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".RCVIEW">


  <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recycelerview"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

view.xml

 <androidx.cardview.widget.CardView 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_margin="10dp"
 app:cardCornerRadius="5dp"
 android:padding="10dp"
 app:cardElevation="10dp"
 app:cardMaxElevation="5dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:layout_margin="10dp"
        android:text="Termname"
        android:textAlignment="center"
        android:textColor="#ffff"
        android:textStyle="bold"/>

    <TextView
        android:textStyle="bold"
        android:id="@+id/detail"
        android:layout_below="@id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:layout_marginLeft="5dp"
        android:text="Lorem Ipsum"
        android:padding="5dp"
        android:textAlignment="center"/>

</RelativeLayout>
</androidx.cardview.widget.CardView>

banner_ads.xml

 <androidx.cardview.widget.CardView 
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:id="@+id/ads"
 android:layout_height="wrap_content"
 app:cardCornerRadius="5dp"
 android:padding="10dp"
 app:cardElevation="10dp"
 app:cardMaxElevation="5dp">
 </androidx.cardview.widget.CardView>

RcHolder.java

public static final int rc_item = 0;
public static final int rc_ads = 1;

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull 
ViewGroup parent, int viewType) {
    switch (viewType) {
        case rc_item:
            return new 
 MyViewHolder(LayoutInflater.from(ctx).inflate(R.layout.view, 
 parent, false));
        case rc_ads:

        default:
            return new 
AdViewHolder(LayoutInflater.from(ctx).inflate(R.layout.bannar_ads, 
 parent, false));
    }
  }

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

    int viewType = getItemViewType(position);
    switch (viewType){
        case rc_item:
            MyViewHolder myViewHolder = (MyViewHolder) holder;
            RcModel rcModel = (RcModel) objectList.get(position);
            myViewHolder.title.setText(rcModel.getTitle());
            myViewHolder.detail.setText(rcModel.getDetail());
        case rc_ads:

        default:
            AdViewHolder adViewHolder = (AdViewHolder) holder;
            AdView adView = (AdView) objectList.get(position);
            ViewGroup adcardView = (ViewGroup) 
       adViewHolder.itemView;
            if (adcardView.getChildCount() > 0){
                adcardView.removeAllViews();
            }
            if (adcardView.getParent()!=null){
                ((ViewGroup) 
   adView.getParent()).removeView(adView);
            }
            adcardView.addView(adView);
    }

}

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

@Override
public int getItemViewType(int position) {
    if (position%RCVIEW.ITEM_PER_ADS == 0){
        return rc_ads;
    }
    return rc_item;
}

class MyViewHolder extends RecyclerView.ViewHolder{

    public TextView title;
    public TextView detail;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        title = itemView.findViewById(R.id.title);
        detail = itemView.findViewById(R.id.detail);
    }
   }

    class AdViewHolder extends RecyclerView.ViewHolder{

    public AdViewHolder(@NonNull View itemView) {
        super(itemView);
    }

Как устранить ошибку?

1 Ответ

0 голосов
/ 25 сентября 2019

Обновление, я решаю эту проблему, просто инициализирую этот 3 метод в

tReference.addValueEventListener (new ValueEventListener () {@Override public void onDataChange (@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot qu : dataSnapshot.getChildren()){
            RcModel v = qu.getValue(RcModel.class);
            rcList.add(v);
        }
        Item();
        getBannerAds();
        loadBannerAds();
       adapter = new RcHolder(getApplicationContext(),rcList);
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
...