java.lang.ClassCastException:com.parse.ParseObject无法强制转换为

时间:2016-03-14 21:25:11

标签: android classcastexception

我创建了两个扩展Meal的类(RestaurantParseObject),并创建了2个自定义适配器(BottomFragmentMealAdapterRestaurantAdapter)。我试图在BottomFragmentMealAdapter({1}}中为RestaurantAdapter做任何事情。但它没有用。
这是我的日志:

  

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

这是我的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;
    }
}

4 个答案:

答案 0 :(得分:6)

你必须检查两件事

  1. 确保您的子类具有public default(即零参数)构造函数。您不得修改此构造函数中的任何ParseObject字段。 以及

  2. 在调用ParseObject.registerSubclass(YourClass.class)之前,在Application构造函数中调用Parse.initialize()

答案 1 :(得分:2)

确保在您的应用程序中注册了您的解析类

答案 2 :(得分:0)

我认为ParseQueryAdapter需要ParseObject作为Generics和&#39; Restaurant&#39; class不是ParseObject类型

答案 3 :(得分:0)

将您的Adapter's getItemView()方法更改为 -

 @Override
    public View getItemView(ParseObject parseObject, View v, ViewGroup parent) {
}