Android 从ListView引发的NoTouchElementException

Android 从ListView引发的NoTouchElementException,android,listview,adapter,backendless,Android,Listview,Adapter,Backendless,我有一个ListView,我将一个空适配器传递给它,然后在从服务器提取数据后填充它: Context mContext; List<Recipe> menuList = new ArrayList<>(); private Party party; public MenuAdapter(Context context) { mContext = context; party = PartyPlannerConfig.getCurrentParty();

我有一个ListView,我将一个空适配器传递给它,然后在从服务器提取数据后填充它:

Context mContext;
List<Recipe> menuList = new ArrayList<>();
private Party party;

public MenuAdapter(Context context) {
    mContext = context;
    party = PartyPlannerConfig.getCurrentParty();
}

public void replaceList(final @NonNull List<Recipe> menuList) {
    this.menuList = menuList;
    notifyDataSetChanged();
}
下面是我的任务代码:

private class SavePartyTask extends AsyncTask<Party, Void, Void> {
    @Override
    protected Void doInBackground(Party... params) {
        new PartyController(mContext).saveParty(params[0]);
        return null;
    }
}
}
此时此刻,我已不再困惑,一整天都在试图弄明白这一点。Plz帮助

我认为您有一个并发问题:

party.setMenuItems(modifiedRecipes);
new SavePartyTask().execute(party);
下面是:

PartyPlannerConfig.setCurrentParty(party);
mJobManager.addJobInBackground(new SavePartyJob(party));
我不确定这两个函数做什么,但是如果它们保留对列表的引用而不是复制,那么当UI线程在单击按钮时修改列表时,您可以在后台线程中访问列表

这里的一个简单解决方案是在party对象中复制列表,而不是保留对原始列表的引用:

party.setMenuItems(modifiedRecipes);

确保此setMenuItems复制modifiedRecipes,而不是保留对原始副本的引用。

是的,这看起来像是并发问题。仔细调试代码,根据标记向列表中添加和删除项目。我猜,在某个时刻,您的代码试图删除一个不存在的元素。使用logger跟踪列表中的项目,并检查是否调用空列表。

请发布异步任务代码和party类。谢谢。我认为并发性实际上是这里的问题。
party.setMenuItems(modifiedRecipes);
new SavePartyTask().execute(party);
PartyPlannerConfig.setCurrentParty(party);
mJobManager.addJobInBackground(new SavePartyJob(party));
party.setMenuItems(modifiedRecipes);