Natürlich weiß ich, was dieser Fehler bedeutet, aber ich weiß nicht, wie das zu entfernen ist. Jetzt versuche ich, mitjava.util.ConcurrentModificationException mit benutzerdefinierter ArrayList
private void removeFriendFromList() {
List<Friend> copy = new ArrayList<Friend>(globalSearchFriends);
for (Friend friend : globalSearchFriends) {
if (friend.equals(remove)) {
copy.remove(friend);
}
}
}
Aber das funktioniert nicht. Das ist mein globallist
private List<Friend> globalSearchFriends = new ArrayList<>();
ich Iterieren auch ich versucht, aber es hat nicht funktioniert oder ich habe etwas Schlimmes.
Auch ich muss es hier verwenden: wo ich suche nach einem Freund in api, das funktioniert wie wenn ich Text in EditText eingeben dann in meinem Adapter sehe ich diesen Benutzer, aber das funktioniert nur für wenige Mitglieder, immer wenn ich suche wie "andrew" und dann suche ich "youko" ich bekomme den fehler.
private void serachFriend(final String query) {
etGlobalSearch.addTextChangedListener(new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
FindFriend request = new FindFriend();
request.query = query;
request.query = s.toString().toLowerCase().trim();
backend.findFriend(request).enqueue(new Callback<ResponseFindFriend>() {
@Override
public void onResponse(Call<ResponseFindFriend> call, Response<ResponseFindFriend> response) {
synchronized (globalSearchFriends) {
globalSearchFriends.clear();
removeFriendFromList();
try {
if (response == null)
throw new Exception();
if (!response.isSuccessful())
throw new Exception();
if (response.body() == null)
throw new Exception();
if (response.body().results == null)
throw new Exception();
globalSearchFriends = response.body().results;
} catch (Exception e) {
Log.d("Blad", "sobie");
} finally {
gatherResults();
}
}
}
@Override
public void onFailure(Call<ResponseFindFriend> call, Throwable t) {
synchronized (globalSearchFriends) {
globalSearchFriends.clear();
removeFriendFromList();
gatherResults();
}
}
});
}
});
}
private void removeFriendFromList() {
List<Friend> copy = new ArrayList<Friend>(globalSearchFriends);
for (Friend friend : globalSearchFriends) {
if (friend.equals(remove)) {
copy.remove(friend);
}
}
}
private void gatherResults() {
removeFriendFromList();
for (Friend f : globalSearchFriends)
globalSearchFriends.add(f);
findedFriendsAdapter.setFriendList(globalSearchFriends);
}
Jede Art von Hilfe verbunden, Einen schönen Tag! :)
Bearbeiten Ich habe Fehler in diesem Fall.
java.util.ConcurrentModificationException
for (Friend f : globalSearchFriends)
globalSearchFriends.add(f);
findedFriendsAdapter.setFriendList(globalSearchFriends);
Und auf log ich habe:
at java.util.ArrayList$ArrayListIterator.next
Sie sollten Iterator verwenden, wenn Sie eine Liste während der Iteration ändern. – jitinsharma
Bitte geben Sie eine ** echte ** [mcve] mit einem passenden Stack-Trace an. Beim Iterieren einer Liste sollte das Entfernen von Elementen aus einer anderen Liste einfach funktionieren. Ich nehme also an, dass dein Code nur Teile der Wahrheit zeigt. Und nur für den Rekord: Du hast ** override ** equals in deiner Friends-Klasse? – GhostCat
@jitinsharma Er ändert ** die Liste nicht während der Iteration. Er manipuliert eine ** Kopie ** dieser Liste! – GhostCat