Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I create 2 classes(Meal, Restaurant) which extend ParseObject, and create 2 custom adapters(BottomFragmentMealAdapter, RestaurantAdapter). I tried to do whatever I made in BottomFragmentMealAdapter(it works) for RestaurantAdapter. But it doesn't work.
Here is my log:

FATAL EXCEPTION: main Process: com.bogazici.menumizer, PID: 14739 java.lang.ClassCastException: com.parse.ParseObject cannot be cast to com.bogazici.menumizer.Restaurant at com.bogazici.menumizer.RestaurantAdapter.getItemView(RestaurantAdapter.java:17) at com.parse.ParseQueryAdapter.getView(ParseQueryAdapter.java:547) at android.widget.AbsListView.obtainView(AbsListView.java:2347) at android.widget.ListView.makeAndAddView(ListView.java:1864) at android.widget.ListView.fillDown(ListView.java:698) at android.widget.ListView.fillFromTop(ListView.java:759) at android.widget.ListView.layoutChildren(ListView.java:1659) at android.widget.AbsListView.onLayout(AbsListView.java:2151) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:581) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1627) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1034) at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:744) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1180) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:757) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) at android.widget.FrameLayout.onLayout(FrameLayout.java:514) at android.view.View.layout(View.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(Zyg

Here is my RestaurantAdapter

public class RestaurantAdapter extends ParseQueryAdapter<Restaurant> {
    //top line is 17
    private AlphaAnimation buttonClick;
    public RestaurantAdapter(Context context, final String filter_edit, final String filter_city, final String filter_region,0 final int filter_sort) {
       super(context, new ParseQueryAdapter.QueryFactory<Restaurant>() {
           public ParseQuery<Restaurant> create() {
               // Here we can configure a ParseQuery to display
               // only top-rated meals.
               ParseQuery query = new ParseQuery("Restaurant");
               query.whereContains("city", filter_city);       
    if(!filter_region.equals("*Hepsi*")&&!filter_region.equals("*All*"))
                   query.whereContains("region",filter_region);
               if(filter_edit.equals("nothing")){
               }else{
                   query.whereStartsWith("restaurant", filter_edit);
               }
               switch(filter_sort){
                   case 0:
                       query.orderByAscending("averagePrice");
                       break;
                   case 1:
                       query.orderByDescending("averagePrice");
                       break;
                   case 2:
                       query.orderByAscending("restaurant");
                       break;
                   case 3:
                       query.orderByDescending("averagePoint");
                       break;
                   default:
                       query.orderByAscending("restaurant");
                       break;
               }
               return query;
           }
       });
    }
    @Override
    public View getItemView(Restaurant restaurant, View v, ViewGroup parent) {
        //buttonClick = new AlphaAnimation(1F, 0.8F);
        if (v == null) {
            v = View.inflate(getContext(), R.layout.restaurant_list_item, null);
        }
        super.getItemView(restaurant, v, parent);
        final String str_call = restaurant.getPhone();
        TextView locationTextView = (TextView) v.findViewById(R.id.restaurant_location);
        String str_location= restaurant.getRegion()+", "+restaurant.getCity();
        locationTextView.setText(str_location);
        TextView nameTextView = (TextView) v.findViewById(R.id.restaurant_name);
        nameTextView.setText(restaurant.getName());
        TextView pointTextView = (TextView) v.findViewById(R.id.restaurant_point);
        String str_point = String.valueOf(restaurant.getAveragePoint());
        pointTextView.setText(str_point);
        TextView priceTextView = (TextView) v.findViewById(R.id.restaurant_averageprice);
        String str_price = String.valueOf(restaurant.getAveragePrice())+" TL";
        priceTextView.setText(str_price);
        ImageView callImage = (ImageView) v.findViewById(R.id.restaurant_call);
        callImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View w) {
                // w.startAnimation(buttonClick);
                Intent intent = new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:"+str_call));
                w.getContext().startActivity(intent);
            }
        });
        TextView mapText = (TextView) v.findViewById(R.id.restaurant_map);
        mapText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View w) {
                //w.startAnimation(buttonClick);
            }
        });
        return v;
    }
}
like image 634
Melikşah Çakır Avatar asked Mar 14 '16 21:03

Melikşah Çakır


2 Answers

you have to check two things

  1. Ensure that your subclass has a public default (i.e. zero-argument) constructor. You must not modify any ParseObject fields in this constructor. and

  2. Call ParseObject.registerSubclass(YourClass.class) in your Application constructor before calling Parse.initialize().

like image 165
Oleg Ushakov Avatar answered Nov 16 '22 12:11

Oleg Ushakov


Make sure you registered your parse class in your application

like image 2
makata Avatar answered Nov 16 '22 11:11

makata