Java notify()引发异常

Java notify()引发异常,java,android,Java,Android,我必须从BaseCardAdapter中的列表中删除一个对象。此BaseCardAdapter用于我的SwipeCardView。我试着在按下按钮后移除一个物体。之后,我需要通知适配器一个对象被删除。很遗憾,我收到了以下错误: java.lang.IllegalMonitorStateException:对象在notify()之前未被线程锁定 这是我的密码: public class FeedAdapter extends BaseCardAdapter { private ArrayList

我必须从BaseCardAdapter中的列表中删除一个对象。此BaseCardAdapter用于我的SwipeCardView。我试着在按下按钮后移除一个物体。之后,我需要通知适配器一个对象被删除。很遗憾,我收到了以下错误:

java.lang.IllegalMonitorStateException:对象在notify()之前未被线程锁定

这是我的密码:

public class FeedAdapter extends BaseCardAdapter {

private ArrayList<EventObject> events;
private Activity activity;
private TextView property1, property2, property3, usernameage;
private ImageView userthumb;

public FeedAdapter(ArrayList<EventObject> events, Activity activity) {
    this.events = events;
    this.activity = activity;
}

@Override
public int getCount() {
    return events.size();
}

@Override
public int getCardLayoutId() {
    return R.layout.model_idea_feed;
}

@Override
public void onBindData(final int position, View cardview) {
    if (events.size() == 0 || events == null){
        return;
    }
    ImageView thumb = cardview.findViewById(R.id.feed_thumb_model);
    userthumb = cardview.findViewById(R.id.feed_profile_thumb);

    final TextView eventname = cardview.findViewById(R.id.feed_name_model);
    usernameage  = cardview.findViewById(R.id.feed_username_model);
    TextView date = cardview.findViewById(R.id.feed_date_model);
    TextView additional = cardview.findViewById(R.id.feed_additional_model);
    TextView address = cardview.findViewById(R.id.feed_adress_model);
    property1 = cardview.findViewById(R.id.feed_property1_model);
    property2 = cardview.findViewById(R.id.feed_property2_model);
    property3 = cardview.findViewById(R.id.feed_property3_model);

    ImageButton save = cardview.findViewById(R.id.feed_savebtn_model);
    ImageButton accept = cardview.findViewById(R.id.feed_accept_model);

    switch(Integer.parseInt(events.get(position).getPosition())) {
        case 0:
          thumb.setBackgroundResource(R.drawable.berlin0);
            break;
        case 1:
           thumb.setBackgroundResource(R.drawable.berlin1);

            break;
        case 2:
            thumb.setBackgroundResource(R.drawable.berlin2);

            break;
        default:
            thumb.setBackgroundResource(R.drawable.berlin2);
            break;
    }

    eventname.setText(events.get(position).getName());
    date.setText(events.get(position).getDate());
    additional.setText(events.get(position).getInfos());
    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(activity, Locale.getDefault());

    try {
        addresses = geocoder.getFromLocation(Double.parseDouble(events.get(position).getLat()),Double.parseDouble(events.get(position).getLng()), 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
        String adderess = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
        String city = addresses.get(0).getLocality();
        String state = addresses.get(0).getAdminArea();
        String country = addresses.get(0).getCountryName();
        String postalCode = addresses.get(0).getPostalCode();
        String knownName = addresses.get(0).getFeatureName();
        address.setText(adderess);
    } catch (IOException e) {
        e.printStackTrace();
    }
    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            events.remove(events.get(position));
      //Here Appears the error:

      events.notify();

        }
    });



}



}
公共类FeedAdapter扩展BaseCardAdapter{
私人ArrayList事件;
私人活动;
私有文本视图属性1、属性2、属性3、用户名年龄;
私有ImageView用户拇指;
公共FeedAdapter(ArrayList事件、活动){
这个事件=事件;
这个。活动=活动;
}
@凌驾
public int getCount(){
返回事件。大小();
}
@凌驾
public int getCardLayoutId(){
返回R.layout.model\u idea\u提要;
}
@凌驾
公共无效onBindData(最终整型位置,视图cardview){
if(events.size()=0 | | events==null){
返回;
}
ImageView thumb=cardview.findViewById(R.id.feed\u thumb\u model);
userthumb=cardwiew.findviewbyd(R.id.feed\u profile\u thumb);
final TextView eventname=cardwiew.findviewbyd(R.id.feed\u name\u model);
usernameage=cardwiew.findviewbyd(R.id.feed\u username\u model);
TextView date=cardwiew.findviewbyd(R.id.feed\u date\u model);
TextView additional=cardwiew.findviewbyd(R.id.feed\u additional\u model);
TextView地址=cardview.findViewById(R.id.feed\u address\u model);
property1=cardview.findViewById(R.id.feed\u property1\u模型);
property2=cardwiew.findviewbyd(R.id.feed\u property2\u模型);
property3=cardview.findViewById(R.id.feed\u property3\u模型);
ImageButton save=cardview.findViewById(R.id.feed\u savebtn\u model);
ImageButton accept=cardview.findViewById(R.id.feed\u accept\u model);
开关(Integer.parseInt(events.get(position.getPosition())){
案例0:
thumb.setBackgroundResource(R.drawable.berlin0);
打破
案例1:
拇指.挫折资源(R.drawable.berlin1);
打破
案例2:
拇指.挫折资源(R.drawable.berlin2);
打破
违约:
拇指.挫折资源(R.drawable.berlin2);
打破
}
eventname.setText(events.get(position.getName());
date.setText(events.get(position.getDate());
additional.setText(events.get(position.getInfos());
地理编码器;
列出地址;
地理编码器=新的地理编码器(活动,Locale.getDefault());
试一试{
addresses=geocoder.getFromLocation(Double.parseDouble(events.get(position.getLat()),Double.parseDouble(events.get(position.getLng()),1);//这里1代表返回的最大位置结果,由它建议的1到5个文档决定
String address=addresses.get(0).getAddressLine(0);//如果存在除此之外的任何其他地址行,请通过getMaxAddressLineIndex()检查最大可用地址行
字符串city=addresses.get(0.getLocation();
字符串状态=addresses.get(0.getAdminArea();
字符串country=addresses.get(0.getCountryName();
字符串postalCode=addresses.get(0.getPostalCode();
字符串knownName=addresses.get(0.getFeatureName();
地址.setText(address);
}捕获(IOE异常){
e、 printStackTrace();
}
save.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
events.remove(events.get(position));
//出现以下错误:
events.notify();
}
});
}
}
notify()
与列表和适配器完全无关

您需要的是
notifyDataSetChanged()
,它是在适配器本身上调用的,而不是在数据列表上调用的

替换:

events.notify();
与:

或:


无法选择notifyDataSetChanged或notifyItemRemoved,我只能选择notify或NotifyAll正如我所说,您不能在列表中调用它。我用ArrayAdapter而不是BaseCardAdapter解决了这个问题@BaseCardAdapter中的漫游者您无法使用NotifyDatasetChanged或notifyItemRemoved,因为它不可用。什么是BaseCardAdapter?它不是Android API的一部分。
notifyDataSetChanged();
notifyItemRemoved(position);