آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ذخیره باتن لایک گذاشته شده در تولبار

MarAnd  8 سال پیش  8 سال پیش
0 0

سلام دوستان ، من توی تولبارم یک ایکن لایک گذاشتم که یوزر می تونه لایک کنه و یا لایکش رو برداره . ولی نمیدونم چه جوری باید این ها رو ذخیره کنم. داخل دیتابیس هم یک ستون گذاشتم به اسم post_like که مقدار دیفالتش رو صفر گذاشتم . وقتی هم که یوزر لایک می کنه یه پستی رو باید مقدارش اپدیت بشه به عدد یک . میشه لطفا راهنمایی کنین . اینم کد مربوط به ایکن لایک : 

public boolean state;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.share:
...
...
return true;

case R.id.like:
state = !state;
if(state){
Drawable myDrawable = getResources().getDrawable(R.drawable.ic_action_pressedlike);
item.setIcon(myDrawable);
} else {
Drawable myDrawable = getResources().getDrawable(R.drawable.ic_action_like);
item.setIcon(myDrawable);
}
return true;

default:
return super.onOptionsItemSelected(item);
}
}
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Amir  8 سال پیش
+3 0

یه ستون دیگم بزارید به اسم post_name و اگه فرض کنیم اسم table شما post هست:

با کد زیر می تونید لایک رو ذخیره کنید:

int name = "Item1";
int like = 1;

database.execSQL("INSERT INTO post (post_name, post_like) VALUES ('" + name +"', '" + like + "')");

و با کد زیر مقدار لایک رو بگیرید.

int name = "Item1";
int like = 0;

Cursor cursor = database.rawQuery("SELECT post_like FROM post WHERE post_name='" + name + "'", null);
while (cursor.moveToNext()) {
like = cursor.getInt(cursor.getColumnIndex("post_like"));
}
cursor.close();
 
+3 0
سلام ، البته برای INSERT به این شکل عمل کنید : database.execSQL("INSERT INTO post (post_name, post_like) VALUES ('" + name +"', " + like +")"); ( تک کوتیشن ها رو باید بذارید ) (8 سال پیش)
+2 0
آره آره، جواب رو تغییر دادم، تک کوتیشن ها رو هم باید بزارید. (8 سال پیش)
0 0
دوستان دیتابیس من این جوری هست که فایلش رو دستی کپی می کنم توی فولدر assets و بعد براش نوشتم که کپی بشه توی مسیر فایل دیتابیس در اندروید استودیو یعنی همون فولدر databases . واسه همین فکر نکنم بتونم از execSQL استفاده کنم . چون قرار نیست که ساخته بشه دیگه . بعد کاربر می تونه لایکش رو هم برداره یعنی مقدار ستون post_like صفر هم می تونه باشه . با این حساب دو بار باید اپدیت بشه دیگه ؟ . و این که کدهای مربوط به onOptionesItemSelected همونایی که نوشتم کافیه ؟ اونجا نیاز به تغییر نداره ؟ از اینکه وقت گزاشتین واقعا ممنونم. (8 سال پیش)
+1 0
نه، با execSQL مشکلی نداره. فقط باید اول دیتابیس رو توی SDCARD بریزید و از اونجا execSQL رو اجرا کنید.برای onOptionItemSelected هم باید کدهایی که گفتم رو توی R.id.like ازشون استفاده کنید. (8 سال پیش)
پاسخ به سوال 
MarAnd  8 سال پیش
0 0

 پاسخ صحیح

سلام دوستان ؛ ممنونم از اینکه وقت گزاشتین برای سوال من و جواب های شما به من خیلی کمک کرد و در نهایت با این کد زیر  تونستم لایکم رو در سمت دیتابیس ام ، اکی کنم : 

public void updateDB (boolean state, int pid){
openDatabase();
int myInt = (state)? 1 : 0;

ContentValues values = new ContentValues();
values.put(KEY_POST_LIKE, myInt);
myDatabase.update(TABLE_NAME, values, KEY_POST_ID + " = ? ", new String[] { String.valueOf(pid) });
closeDatabase();
}

ستون post_like  رو از نوع اینت گزاشتم و شرطش رو هم اینکه کدوم پست انتخاب شده گزاشتم . 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .