java.lang.ClassCastException: java.util.ArrayList无法转换为com.parse.ParseObject

huangapple go评论98阅读模式
英文:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.parse.ParseObject

问题

  1. // RoomCardRecyclerViewAdapter
  2. private List<ParseObject> mRooms = new ArrayList<>();
  3. private ParseObject room;
  4. private String mSection;
  5. private Context context;
  6. public RoomCardRecyclerViewAdapter() {
  7. super(DIFF_CALLBACK);
  8. }
  9. public static final DiffUtil.ItemCallback<ParseObject> DIFF_CALLBACK =
  10. new DiffUtil.ItemCallback<ParseObject>() {
  11. @Override
  12. public boolean areItemsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
  13. return oldItem.getObjectId().equals(newItem.getObjectId());
  14. }
  15. @Override
  16. public boolean areContentsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
  17. return oldItem.getUpdatedAt().equals(newItem.getUpdatedAt()) &&
  18. oldItem.getCreatedAt().equals(newItem.getCreatedAt());
  19. }
  20. };
  21. public RoomCardRecyclerViewAdapter(String section) {
  22. this();
  23. this.mSection = section;
  24. }
  25. public RoomCardRecyclerViewAdapter(Context context, List<ParseObject> arrayList) {
  26. this();
  27. this.context = context;
  28. mRooms = arrayList;
  29. }
  30. @Override
  31. public RoomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  32. View view = LayoutInflater.from(parent.getContext())
  33. .inflate(R.layout.room_cardview, parent, false);
  34. return new RoomViewHolder(parent.getContext(), view);
  35. }
  36. @Override
  37. public void onBindViewHolder(@NonNull RoomViewHolder holder, int position) {
  38. room = getItem(position);
  39. holder.mRoomLocation.setText(room.getString("roomSuburb"));
  40. holder.mRoomPrice.setText(Integer.toString(room.getInt("roomMonthlyRent")));
  41. holder.mInclusiveOrNot.setText(room.getString("roomRentInclusiveOfBills"));
  42. holder.mPropertyType.setText(room.getString("roomPropertyType"));
  43. holder.mNumOfBeds.setText(Integer.toString(room.getInt("roomBedrooms")));
  44. holder.mNumOfBaths.setText(Integer.toString(room.getInt("roomBathrooms")));
  45. }
  46. @Override
  47. public Filter getFilter() {
  48. return new Filter() {
  49. @Override
  50. protected FilterResults performFiltering(CharSequence charSequence) {
  51. FilterResults filterResults = new FilterResults();
  52. String charString = charSequence.toString();
  53. if (charString.isEmpty()) {
  54. filterResults.values = mRooms;
  55. filterResults.count = mRooms.size();
  56. } else {
  57. List<ParseObject> filteredList = new ArrayList<>();
  58. for (ParseObject parseObject : mRooms) {
  59. if (parseObject.getString("roomSuburb").toLowerCase().contains(charString.toLowerCase())) {
  60. filteredList.add(parseObject);
  61. }
  62. }
  63. filterResults.values = filteredList;
  64. filterResults.count = filteredList.size();
  65. }
  66. return filterResults;
  67. }
  68. @Override
  69. protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
  70. mRooms = (ArrayList<ParseObject>) filterResults.values;
  71. notifyDataSetChanged();
  72. }
  73. };
  74. }

(Note: The provided code is the translated version of the Java code snippet you provided. I've made sure to include only the code portion and omit any additional explanations or comments.)

英文:

I m currently working on a android apps which fetch data from parse server. I wanted to filter my recyclerView by using searchview. But it shows me nothing while search. It shows me error in this line mRooms = (ArrayList<ParseObject>) filterResults.values;
Please help me to edit my code regarding this issues.

RoomCardRecyclerViewAdapter

  1. private List&lt;ParseObject&gt; mRooms = new ArrayList&lt;&gt;();
  2. private ParseObject room;
  3. private String mSection;
  4. private Context context;
  5. public RoomCardRecyclerViewAdapter(){
  6. super(DIFF_CALLBACK);
  7. }
  8. public static final DiffUtil.ItemCallback&lt;ParseObject&gt; DIFF_CALLBACK = new
  9. DiffUtil.ItemCallback&lt;ParseObject&gt;() {
  10. @Override
  11. public boolean areItemsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
  12. return oldItem.getObjectId() == newItem.getObjectId();
  13. }
  14. @Override
  15. public boolean areContentsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
  16. return (oldItem.getUpdatedAt().equals(newItem.getUpdatedAt()) &amp;&amp;
  17. oldItem.getCreatedAt().equals(newItem.getCreatedAt()));
  18. }
  19. };
  20. public RoomCardRecyclerViewAdapter(String section) {
  21. this();
  22. this.mSection = section;
  23. }
  24. public RoomCardRecyclerViewAdapter(Context context, List&lt;ParseObject&gt;arrayList) {
  25. this();
  26. this.context = context;
  27. mRooms = arrayList;
  28. }
  29. @Override
  30. public RoomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  31. //inflating the viewholder with the appropriate views
  32. View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.room_cardview, parent,
  33. false);
  34. return new RoomViewHolder(parent.getContext(), view);
  35. }
  36. @Override
  37. public void onBindViewHolder(@NonNull RoomViewHolder holder, int position) {
  38. room = getItem(position);
  39. holder.mRoomLocation.setText(room.getString(&quot;roomSuburb&quot;));
  40. holder.mRoomPrice.setText(Integer.toString(room.getInt(&quot;roomMonthlyRent&quot;)));
  41. holder.mInclusiveOrNot.setText(room.getString(&quot;roomRentInclusiveOfBills&quot;));
  42. holder.mPropertyType.setText(room.getString(&quot;roomPropertyType&quot;));
  43. holder.mNumOfBeds.setText(Integer.toString(room.getInt(&quot;roomBedrooms&quot;)));
  44. holder.mNumOfBaths.setText(Integer.toString(room.getInt(&quot;roomBathrooms&quot;)));
  45. }
  46. @Override
  47. public Filter getFilter(){
  48. return new Filter() {
  49. @Override
  50. protected FilterResults performFiltering(CharSequence charSequence) {
  51. FilterResults filterResults = new FilterResults();
  52. String charString = charSequence.toString();
  53. if (charString.isEmpty()){
  54. filterResults.values = mRooms;
  55. filterResults.count = mRooms.size();
  56. }else {
  57. List&lt;ParseObject&gt; filteredList = new ArrayList&lt;&gt;();
  58. for (ParseObject parseObject : mRooms){
  59. if (parseObject.getString(&quot;roomSuburb&quot;).toLowerCase().contains(charString.toLowerCase())){
  60. filteredList.add(parseObject);
  61. }
  62. }
  63. filterResults.values = filteredList;
  64. filterResults.count= filteredList.size();
  65. }
  66. return filterResults;
  67. }
  68. @Override
  69. protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
  70. mRooms = (ArrayList&lt;ParseObject&gt;) filterResults.values;
  71. notifyDataSetChanged();
  72. }
  73. };
  74. }

答案1

得分: 1

你只需要按照以下方式调用notifyDataSetChanged() -

使用这个

  1. @Override
  2. protected void publishResults(CharSequence charSequence, FilterResults
  3. filterResults) {
  4. if (filterResults!= null && results.count > 0) {
  5. notifyDataSetChanged();
  6. } else {
  7. notifyDataSetInvalidated();
  8. }
  9. }
英文:

You just need to call notifyDataSetChanged() as below -

Use this

  1. @Override
  2. protected void publishResults(CharSequence charSequence, FilterResults
  3. filterResults) {
  4. if (filterResults!= null &amp;&amp; results.count &gt; 0) {
  5. notifyDataSetChanged();
  6. } else {
  7. notifyDataSetInvalidated();
  8. }
  9. }

答案2

得分: 0

请注意,由于格式限制,某些特殊字符可能无法在代码部分完美显示,我将尽力保留原始代码的结构。

  1. private List<ParseObject> mFilteredRooms = new ArrayList<>();
  2. public RoomCardRecyclerViewAdapter(Context context, List<ParseObject> arrayList) {
  3. this();
  4. this.context = context;
  5. mRooms = arrayList;
  6. mFilteredRooms = arrayList;
  7. }
  8. @Override
  9. public Filter getFilter(){
  10. return new Filter() {
  11. @Override
  12. protected FilterResults performFiltering(CharSequence charSequence) {
  13. FilterResults filterResults = new FilterResults();
  14. ArrayList<ParseObject> filteredList = new ArrayList<>();
  15. if (charSequence == null || charSequence.toString().trim().equals("")){
  16. filteredList.addAll(mFilteredRooms);
  17. } else {
  18. String charString = charSequence.toString();
  19. for (ParseObject parseObject : mFilteredRooms){
  20. if (parseObject.getString("roomSuburb").toLowerCase().contains(charString.toLowerCase())){
  21. filteredList.add(parseObject);
  22. }
  23. }
  24. filterResults.values = filteredList;
  25. filterResults.count = filteredList.size();
  26. }
  27. return filterResults;
  28. }
  29. @Override
  30. protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
  31. mRooms = (List<ParseObject>) filterResults.values;
  32. notifyDataSetChanged();
  33. }
  34. };
  35. }
英文:

Define an additional variable mFilteredRooms in the constructor and set it to arrayList

  1. private List&lt;ParseObject&gt; mFilteredRooms = new ArrayList&lt;&gt;();
  2. public RoomCardRecyclerViewAdapter(Context context, List&lt;ParseObject&gt; arrayList) {
  3. this();
  4. this.context = context;
  5. mRooms = arrayList;
  6. mFilteredRooms = arrayList;
  7. }

Now,

  1. @Override
  2. public Filter getFilter(){
  3. return new Filter() {
  4. @Override
  5. protected FilterResults performFiltering(CharSequence charSequence) {
  6. FilterResults filterResults = new FilterResults();
  7. ArrayList&lt;ParseObject&gt; filteredList = new ArrayList&lt;&gt;();
  8. if (charSequence == null || charSequence.toString().trim().equals(&quot;&quot;)){
  9. filteredList.addAll(mFilteredRooms);
  10. }else {
  11. String charString = charSequence.toString();
  12. for (ParseObject parseObject : mFilteredRooms){
  13. if (parseObject.getString(&quot;roomSuburb&quot;).toLowerCase().contains(charString.toLowerCase())){
  14. filteredList.add(parseObject);
  15. }
  16. }
  17. filterResults.values = filteredList;
  18. filterResults.count= filteredList.size();
  19. }
  20. return filterResults;
  21. }
  22. @Override
  23. protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
  24. mRooms = (List&lt;ParseObject&gt;) filterResults.values;
  25. notifyDataSetChanged();
  26. }
  27. };

huangapple
  • 本文由 发表于 2020年10月8日 12:27:07
  • 转载请务必保留本文链接:https://go.coder-hub.com/64255787.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定