У меня есть пользовательский ListView
, где я показываю элементы из jsonArray
, которые я загружаю с сервера. Теперь я хочу, чтобы пользователь мог «как» записи. Поэтому, когда он нажимает на ListItem
, база данных сервера обновляется, поэтому увеличивается количество Likes. Чтобы избежать того, что пользователям может нравиться бесконечное время, я сохраняю строку в базе данных SQLite с положением ListItem
. Это прекрасно работает до тех пор, пока в базе данных сервера не появятся новые записи, и позиции меняются. Как я могу решить эту проблему? Есть ли возможность получить идентификатор от ListItem
вместо позитива или чего-то еще? Вот мой код:Получить ListItem Id
getALlEntrysListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor cursor = getLikes(dbh);
cursor.moveToFirst();
if (cursor.moveToFirst()) {
do {
/*check if Item is liked (=1) or not (=0)*/
if (Integer.parseInt(cursor.getString(2)) == 1) {
dbh.updateLike(dbh, position, Integer.parseInt(cursor.getString(2)), 0);
dislike(position);
cursor.close();
} else if (Integer.parseInt(cursor.getString(2)) == 0) {
dbh.updateLike(dbh, position, Integer.parseInt(cursor.getString(2)), 1);
likeUpload(position);
cursor.close();
} else {
dbh.addLike(dbh, position, 1);
likeUpload(position);
cursor.close();
}
} while (cursor.moveToNext());
}
/*increase numer of likes on the Server Database (the dislike method works the same way):*/
public void likeUpload (int position){
try {
JSONObject entryClicked = jsonArray.getJSONObject(position);
entryID = entryClicked.getString("id");
final List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", entryID));
new AsyncTask<ApiConnector, Long, Boolean>() {
@Override
protected Boolean doInBackground(ApiConnector... apiConnectors) {
return apiConnectors[0].like(params);
}
}.execute(new ApiConnector());
finish();
startActivity(getIntent());
Вместо того, чтобы использовать положение, чтобы знать, если пользователь понравилось или не использовать идентификатор объекта «за» это ListView. – Leonardo