Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将对象[]强制转换为自定义项[]_Android_Listview_Casting_Arraylist - Fatal编程技术网

Android 将对象[]强制转换为自定义项[]

Android 将对象[]强制转换为自定义项[],android,listview,casting,arraylist,Android,Listview,Casting,Arraylist,我有我的数组列表 ArrayList<Item> itemList = new ArrayList<Item>(); 这给了我一个错误: java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.raynemartin.SAAndroidAppCompetition.Item[] 如果注定要失败,我如何访问项目的属性? 这些项位于ArrayList中,因此它们可以填充并显示andro

我有我的数组列表

ArrayList<Item> itemList = new ArrayList<Item>();
这给了我一个错误:

 java.lang.ClassCastException: java.lang.Object[] cannot be cast to com.raynemartin.SAAndroidAppCompetition.Item[]
如果注定要失败,我如何访问项目的属性? 这些项位于ArrayList中,因此它们可以填充并显示android ListView。现在我想对ArrayList进行排序,但需要访问Item类的.getRating()方法

Item[] itemArr= (Item[])itemList.toArray();

    for(int i =0;i<itemArr.length;i++){
            for(int j=i;i<itemArr.length;j++){
                if(itemArr[j].getRating()>itemArr[i].getRating()){
                        Item temp = itemArr[j];
                        itemArr[j] = itemArr[i];
                        itemArr[i] = temp;
                }
            }
        }
    }

让类实现接口并使用


整理你的收藏。因此,您不必自己构造数组并对其进行排序。

让类项实现接口并使用


整理你的收藏。因此,您不必自己构造数组并对其进行排序。

如果确实需要以数组的形式访问元素,您最好使用

itemList.toArray(new Item[0]);


因为这将为您提供类型为Item的数组,而不是对象数组。在web上的其他地方也有很多关于这个问题的讨论。

如果您真的需要以数组的形式访问元素,您最好使用

itemList.toArray(new Item[0]);


因为这将为您提供类型为Item的数组,而不是对象数组。关于这个问题,在网上其他地方有很多讨论。

要排序,您可以尝试下面的方法

在Item类中实现toString

public String toString()
{
    return String.valueOf(rating);
}
实现一个比较器

 class SortingRating implements Comparator<Item>
{

        @Override
        public int compare(Item arg0, Item arg1) {
            if (arg0.getRating() < arg1.getRating()) return -1;
            if (arg0.getRating() > arg1.getRating()) return 1;
            return 0;
    }

}
如果我错了,请纠正我

public class MainClass {
    static ArrayList<Item> aa = new ArrayList<Item>();
    public static void main(String[] args) {

        Item i1 = new Item("soap","sales","yes",4.0);
        aa.add(i1);
        Item i2 = new Item("soap","sales","yes",5.2);
        aa.add(i2);
        Item i3 = new Item("soap","sales","yes",3.8);
        aa.add(i3);
        Item i4 = new Item("soap","sales","yes",5.1);
        aa.add(i4);

         Collections.sort(aa, new SortingRating());
         for(int i=0;i<aa.size();i++)
         {
         System.out.println("Title  : " +aa.get(i).getTitle()+"--"+"Category : "+aa.get(i).getCategory()+"--"+"Downlaods : "+aa.get(i).getDownloads()+"--"+"Rating : "+aa.get(i).getRating());
         }

    }
}
class SortingRating implements Comparator<Item>
{

        @Override
        public int compare(Item arg0, Item arg1) {
            if (arg0.getRating() < arg1.getRating()) return -1;
            if (arg0.getRating() > arg1.getRating()) return 1;
            return 0;
        }   
}
输出

Title  : soap--Category : sales--Downlaods : yes--Rating : 3.8
Title  : soap--Category : sales--Downlaods : yes--Rating : 4.0
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.1
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.2

要排序,您可以尝试以下方法

在Item类中实现toString

public String toString()
{
    return String.valueOf(rating);
}
实现一个比较器

 class SortingRating implements Comparator<Item>
{

        @Override
        public int compare(Item arg0, Item arg1) {
            if (arg0.getRating() < arg1.getRating()) return -1;
            if (arg0.getRating() > arg1.getRating()) return 1;
            return 0;
    }

}
如果我错了,请纠正我

public class MainClass {
    static ArrayList<Item> aa = new ArrayList<Item>();
    public static void main(String[] args) {

        Item i1 = new Item("soap","sales","yes",4.0);
        aa.add(i1);
        Item i2 = new Item("soap","sales","yes",5.2);
        aa.add(i2);
        Item i3 = new Item("soap","sales","yes",3.8);
        aa.add(i3);
        Item i4 = new Item("soap","sales","yes",5.1);
        aa.add(i4);

         Collections.sort(aa, new SortingRating());
         for(int i=0;i<aa.size();i++)
         {
         System.out.println("Title  : " +aa.get(i).getTitle()+"--"+"Category : "+aa.get(i).getCategory()+"--"+"Downlaods : "+aa.get(i).getDownloads()+"--"+"Rating : "+aa.get(i).getRating());
         }

    }
}
class SortingRating implements Comparator<Item>
{

        @Override
        public int compare(Item arg0, Item arg1) {
            if (arg0.getRating() < arg1.getRating()) return -1;
            if (arg0.getRating() > arg1.getRating()) return 1;
            return 0;
        }   
}
输出

Title  : soap--Category : sales--Downlaods : yes--Rating : 3.8
Title  : soap--Category : sales--Downlaods : yes--Rating : 4.0
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.1
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.2

显示您的
项目
类别代码。。选中此选项与您的问题无关,但仍值得更改:将ArrayList更改为List。尝试Item[]itemArr=itemList.toArray(新项[itemList.size())@RayneMartin船长请尝试我的答案,并告诉我它是否能显示您的
物品
班级代码。。选中此选项与您的问题无关,但仍值得更改:将ArrayList更改为List。尝试Item[]itemArr=itemList.toArray(新项[itemList.size())@RayneMartin船长请尝试我的答案,并让我知道它是否有效谢谢,这是一个易于使用的解决方案谢谢,这是一个易于使用的解决方案
Title  : soap--Category : sales--Downlaods : yes--Rating : 3.8
Title  : soap--Category : sales--Downlaods : yes--Rating : 4.0
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.1
Title  : soap--Category : sales--Downlaods : yes--Rating : 5.2