gpt4 book ai didi

java - ArrayList 中的不兼容类型错误
转载 作者:搜寻专家 更新时间:2023-11-01 07:45:03 24 4
gpt4 key购买 nike

我正在尝试将广告放入当前正在解析 JSON 文件的 RecyclerView 中,问题是当我尝试用广告或来自 JSON 的数据填充它时,ArrayList 抛出转换错误。

错误发生在两个地方,一个在 RecyclerViewAdapter() 方法体中,另一个在 BindViewHolder() 中。

这是我来自 RecyclerViewAdapter.java 的代码(错误在第 5 行注释)

private ArrayList<Object> arrayList = new ArrayList<>();

public RecyclerViewAdapter(Context context, ArrayList<CardSetterGetter> arrayList, ArrayList<String> favouriteItemList, int totalCount) {
this.context = context;
this.arrayList = arrayList; //Incompatible types. Required: ArrayList<java.lang.object>; found: ArrayList<com.comp.app.modal.CardSetterGetter>
this.favouriteItemList = favouriteItemList;
this.totalCount = totalCount;

}

onBindViewHolder()(错误注释在第 27 行)

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

int viewType = getItemViewType(position);

switch (viewType){

case AD_VIEW_TYPE:
NativeExpressAdViewHolder nativeExpressHolder = (NativeExpressAdViewHolder)holder;
NativeExpressAdView adView = (NativeExpressAdView)arrayList.get(position);

ViewGroup adCardView = (ViewGroup)nativeExpressHolder.itemView;
adCardView.removeAllViews();

if(adView.getParent() != null){
((ViewGroup)adView.getParent()).removeView(adView);
}

adCardView.addView(adView);
break;

case MENU_ITEM_VIEW_TYPE:

default:
String card_image;
CardSetterGetter cardSetterGetter;
cardSetterGetter = arrayList.get(position); //Incompatible types. Required: ArrayList<com.comp.app.modal.CardSetterGetter>; found: ArrayList<java.lang.object>;

card_image = constants.SERVERIP.concat(cardSetterGetter.getImageurl());
holder.cardSetterGetter = cardSetterGetter;
holder.title.setText(cardSetterGetter.getImagetitle()); //set title

PointF focusPoint = new PointF(0.5f, 0f);
// your app populates the focus point

holder.image // set image
.getHierarchy()
.setActualImageFocusPoint(focusPoint);
holder.image.setImageURI(Uri.parse(card_image));
}

}

这是我的 CardSetterGetter.java

public class CardSetterGetter implements Serializable {
private String imagetitle ;
private String imageurl;
private String description;
private String tag;
private boolean isFavorite;

public String getImageId() {
return imageId;
}

public void setImageId(String imageId) {
this.imageId = imageId;
}

public String getFavourite() {
return favourite;
}

public void setFavourite(String favourite) {
this.favourite = favourite;
}

private String imageId ;
private String favourite ;



public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

public String category;

public CardSetterGetter(){

}

public String getImagetitle() {
return imagetitle;
}

public void setImagetitle(String imagetitle) {
this.imagetitle = imagetitle;
}

public String getImageurl() {
return imageurl;
}

public void setImageurl(String imageurl) {
this.imageurl = imageurl;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getTag() {
return tag;
}

public void setTag(String tag) {
this.tag = tag;
}

public CardSetterGetter(String imageurl , String imagetitle , String description , String category , String tag,String imageId ,String favourite){
this.imageurl = imageurl ;
this.imagetitle = imagetitle ;
this.description = description ;
this.tag = tag ;
this.category = category ;
this.isFavorite =false ;
this.imageId = imageId ;
this.favourite = favourite ;
}


public boolean isFavorite() {
return isFavorite;
}

public void setFavorite(String favorite) {
favourite = favorite;
}
}

我尝试了一些关于 StackOverFlow 的问题,比如这个 ( Question ),但我无法理解解决方案的基本概念,我已经将数据类型更改为对象(来自 CardSetterGetter)。

另外请告诉我,如果这个转换问题得到解决并且 arrayList 在 CardSetterGetter 预期的位置返回 adView 时会发生什么,反之亦然,我是否需要将所有此类语句放在 try catch block 中?

最佳答案

问题:您的列表包含两种项目 CardSetterGetterNativeExpressAdView 因此您需要使用 Objects 列表而不是任何特定类型因为这两种类型没有关系加上在适当的地方应用转换

使用这个

public RecyclerViewAdapter(Context context, ArrayList<Object> arrayList, ArrayList<String> favouriteItemList, int totalCount) {

并使用转换

cardSetterGetter =(CardSetterGetter ) arrayList.get(position); 

代替

public RecyclerViewAdapter(Context context, ArrayList<CardSetterGetter> arrayList, ArrayList<String> favouriteItemList, int totalCount) {

Also tell me what happens if this issue of casting is solved and the arrayList returns adView where CardSetterGetter is expected or vice-versa, Do I need to put all such statements in try catch blocks?

getItemViewType(position) 根据position

工作
   // ITEMS_PER_AD = 8
return (position % MainActivity.ITEMS_PER_AD == 0) ? NATIVE_EXPRESS_AD_VIEW_TYPE
: MENU_ITEM_VIEW_TYPE;

列表中 position % 8 == 0 项 (0,8,16,24,32...) 的平均结果将是 NATIVE_EXPRESS_AD_VIEW_TYPE 类型,因此它是 position 相关的数学。

关于java - ArrayList<Object> 中的不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46490075/

24 4 0