2016-03-14 97 views
2

創建2類(MealRestaurant)延伸ParseObject,以及創建自定義2個適配器(BottomFragmentMealAdapterRestaurantAdapter)。我試圖做我在BottomFragmentMealAdapter(它工作)爲RestaurantAdapter做的任何事情。但它不起作用。
這是我的日誌:java.lang.ClassCastException:com.parse.ParseObject不能轉換到

致命異常:主要 過程:com.bogazici.menumizer,PID:14739 java.lang.ClassCastException:com.parse.ParseObject不能轉換爲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) 在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) 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.onLa (android.view.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at android.widget.FrameLayout.layoutChildren(())(android.view.java:15671)在android.view.View.Group.layout(ViewGroup。)中的android.view.View.layout(View.java:15671) 上的android.widget.FrameLayout.onLayout(FrameLayout.java:514) (FrameLayout.java:579) 。在Android.widget.LinearLayout.onLayout(Lin())中的android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) (android.view.java:15671) at android.view.ViewGroup.layout(ViewGroup.java:5038) at 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) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) at 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) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreograph er.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

這是我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; 
    } 
} 
+0

你 「在你的餐廳類(餐廳? –

+0

@ParseClassName使用權@ParseClassName)(」 餐廳「) 公共類餐廳擴展的parseObject { 公共餐廳(){} 公共 字符串getObjectId (){ 回報的getString( 「對象ID」);} ... –

回答

0

我覺得ParseQueryAdapter需要的parseObject爲泛型和 '餐廳' 類不是的parseObject類型

0

更改Adapter's getItemView()方法看起來像 -

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

@ParseClassName( 「飯」) 公共類膳食擴展的parseObject { 公共餐(){ } //它的工作原理 @ParseC lassName(「Restaurant」) public class Restaurant extends ParseObject { public Restaurant(){ } //不起作用。 –

1

確保您註冊您的分析類在您的應用程序

4

必須檢查兩件事情

  1. 確保您的子類有public default(即零參數)構造函數。您不得修改此構造函數中的任何ParseObject字段。 和

  2. 在調用Parse.initialize()之前,在您的應用構造函數中調用ParseObject.registerSubclass(YourClass.class)

相關問題