رفتن به مطلب
  • 0

مشکل در لایک در دیتابیس آنلاین


maryam22

سوال

سلام 

من یه پروزه ای ساختم که توش یه ریسایکلرویو دارم که میاد اطلاعاتو به صورت جیسون به وسیله والی میگیره و تو ریسایکلر ویو نمایش میده یه عکس میگیره یه متن و عنوان و غیره تو این قسمت یه امیج ویو هم گذاشتم تا وقتی کاربر از پست مورد نظر خوشش اومد بیاد انو لایک کنه

حالا اینجا یه مشکلی هست اگه یک نفر بیاد یه پست رو لایک کنه و تو دیتابیس ذخیره شده برای همه هم میره تو علاقمندها(یعنی تو علاقمندیهای همه ٍبت میشه)برای جلوگیری از این امر من اومدم شماره سریال گوشی رو گرفتم و به عنوان یه آیدی فرستادم به دیتابیس و از اونجایی که میدونید شماره سریال هر گوشی متفاوته به جز چندتا که اونا رو هم به صورت رندم میشه حل کرد

حالا دیتابیس 

اطلاعات دیتابیس من از 1و2و3و...شروع شدن

حالا چون اطلاعات توسط والی تو لیست ذخیره میشن و لیست هم از صفر شروع مکنه به خوندن من تو این قسمت مشکل دارم

یعنی وقتی آیدی 1 رو میخوام لایک کنم میره آیدی 0رو لایک میکنه (این قسمتو اومدم یه 1 به پوزیشن اظافه کردم و مشکل حل شد)ولی وقتی دوباره میخوام اطلاعاتو بگیرم تا ببینم آیا اونایی رو که لایک کردم به صروت لایک شده ها نشون میده یا نه مشکل پیش میاد

یعنی اگه 1رو لایک کرده بودم میاد 5رو هم لاییک مینه در حالی که تو دیتابیس 5لایک نخورده

 

تو رو اگه کسی بلده بگ یا روش دیگه ای بلده بگه ممنون میشم

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

16 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام دوست عزیز

شما اول چک کن مشکل از کدوم طرف ه اگه سمت سرور بود خوب معلومه تو کد های sql اشتباه کردی و اونو باید درست نه اگه سمت کاربر یه مشکل هست که داره اشتباه میفرسته

برای اینکه بفهمی سمت سرور هست یا نه از برنامه POSTMAN که هم رو مرورگر کروم نصب میشه و هم رو خود ویندوز می تونی استفاده کنی اطلاعات ارسالی و دریافتی رو چک کنی (مثل همون والی ازت کلید و مقدار می خواد)

بعد اگه مشکلی بود که نمی تونستی حل ش کنی کد اون قسمت رو بفرست تا من و دوستان چک کنیم

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

شما بیاید یه ستون با id درست کنید و به این ستون خاصیت AUTO_INCREMENT بدید. (به صورت خودکار شماره میزاره برای هر ردیف)

موقع دریافت اطلاعات از سرور این آی دی هم همراهش دریافت کنید .

تو قسمت دیزاین اون باتنی که مثلا لایک هست تگش رو برابر این ایدی بزارید.

حالا موقع کلیک شدن باتن این تگ رو همرا با اون شناسه گوشی و شناسه پست(مثلا عنوان پست) بفرستید.

Button1.tag = ID

از Sender هم تو قسمت رویداد باتن استفاده کنید برای فهمیدن چه باتنی کلید شده.

Dim button1 as Button = Sender

تو قسمت php یا asp سایت این شناسه با آی دی رو دریافت کنید و مطابقت قرار بدید با ردیف ای دیتابیس اگه اوکی بود با دستور update اون بخش از لایک پست رو اپدیت کنید.

 

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

در 12 دقیقه قبل، amir54 گفته است :

سلام دوست عزیز

شما اول چک کن مشکل از کدوم طرف ه اگه سمت سرور بود خوب معلومه تو کد های sql اشتباه کردی و اونو باید درست نه اگه سمت کاربر یه مشکل هست که داره اشتباه میفرسته

برای اینکه بفهمی سمت سرور هست یا نه از برنامه POSTMAN که هم رو مرورگر کروم نصب میشه و هم رو خود ویندوز می تونی استفاده کنی اطلاعات ارسالی و دریافتی رو چک کنی (مثل همون والی ازت کلید و مقدار می خواد)

بعد اگه مشکلی بود که نمی تونستی حل ش کنی کد اون قسمت رو بفرست تا من و دوستان چک کنیم

تشکر میکنم از پاسختون 

اصلا ایا متن مشکل رو خوندید ؟ در ضم مشکل بنده در دریافت لایک خورده هاست

یعنی اینکه بدون مشکل میتونم اون ایدی که کاربر زد رو تو دیتابیس به عنوان علاقمندیها بزارم ولی نمیتونم اطلاعات رو بگیرم

مثلا اگه گزینه سوم تو دیتابیس لایک خورده باشه میاد 2و5رو به عنوان علاقمندیها در برنامه اندروید نشون میده

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

در 17 ساعت قبل، maryam22 گفته است :

اگه توجه کرده باشید من مشکلم تو اندروید استودیو هستش نه بیسیک4

سلام شرمنده درست نخوندم

فکر کنم منظور شما اینه که یک بار متن ها رو میگیرید نمایش میدید اگه لایک شد میفرسته سرور و دوباره می خواید بگیرید علاوه بر متن لایک شده یه متن دیگه هم لایک میشه این دفعه این جوری فهمیدم:DD:

اگه این منظورتونه دوستمون راست میگه (ایشون به بیسیک گفتن تبدیل به اندروید استودیو زیادم سخت نیست)شما باید از Tag استفده کنید به button یا view که هست تگ ایدی متن رو بدین و اونو بفرستین و موقع خوندن ایدی لایک رو با ایدی متن مقایسه کنه بعد لایک رو بزاره 

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

آقا امیر من میدونم راهای زیادی داره ولی ایا این شد جواب

یه چیزی میگید بیا ثابتش کن نه این که هرچی تو ذهنت رو میگذره بیان کنی

 

ممنون

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

دوست عزیز شما احتمالا مشکلتون تو درک طرز کار ریسایکلر ویو هست. یعنی قطعا همین طور هست. شما حتما باید به این نکته توجه داشته باشید که ریسایکلر ویو به صورت بازیافت شونده دیتاها رو میگیره و نشون میده و حتما برای گرفتن مقادیر دیتاست باید از چیزی غیر از پوزیشن استفاده کنید یعنی اینکه باید حتما اعتبار سنجی لازم برای فرستادن آیدی برای لایک رو انجام بدید. با ریسایکلر ویو حتما زیاد کنید و طرز کارشو درک کنید. درصورتی که مشکل حل نشد کدهای آداپتر رو قرار بدید

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

این کل کد 

public class CustomAdp_RecyMain extends RecyclerView.Adapter<CustomAdp_RecyMain.ViewHolder> {
    List<Data_recycler> listData = new ArrayList<>();


    Activity context;
    ImageView imgFav;
    ImageView copyText,shareTextAndpic;
    G g=new G();
    int  ids;
    boolean favcheek;

    public CustomAdp_RecyMain(List<Data_recycler> listData, Activity context) {
        this.listData = listData;
        this.context = context;
    }


    @NonNull
    @Override
    public ViewHolderAfraz onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_item_recycler, parent, false);
        ViewHolderAfraz viewHolder = new ViewHolder(v);
        return viewHolder;


    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {

       // G.useridcheek =G.list.get(holder.getAdapterPosition()).getUserid();


    holder.onvan.setText(listData.get(position).getOnvan());
    holder.matn.setText(listData.get(position).getMatn());

    String s = listData.get(position).getImgAdress();

    Picasso.with(context).load(s).error(R.drawable.ic_launcher_background).into(holder.imgadress);
    holder.matn.setText(listData.get(position).getMatn());
    holder.onvan.setText(listData.get(position).getOnvan());
    holder.matn.setText(listData.get(position).getMatn());

    String tableghatha = listData.get(position).getchanellAdress();
    // Log.e("aaa", tableghatha);


    if (tableghatha.length() > 0) {
        holder.chanellAdress.setVisibility(View.VISIBLE);
        holder.chanellAdress.setText(tableghatha);
    } else {
        holder.chanellAdress.setVisibility(View.GONE);
    }


/*
        int favcheek = listData.get(position).getUserid().indexOf("|" + G.UserId);
        Log.e("favheek"+holder.getAdapterPosition(), String.valueOf(favcheek));




        if (favcheek == 0) {
            likeButton.setLiked(true);
            likeButton.setLikeDrawableRes(R.drawable.ic_favon_24dp);
        } else {
            likeButton.setLiked(false);
            likeButton.setLikeDrawableRes(R.drawable.ic_favoff_24dp);

        }

  */



        favcheek=G.list.get((Integer) imgFav.getTag()).getUserid().equals("|"+G.UserId);


        if (favcheek == true) {
            imgFav.setImageResource(R.drawable.ic_favon_24dp);
        } else {
            imgFav.setImageResource(R.drawable.ic_favoff_24dp);

        }






    }




    @Override
    public void onViewAttachedToWindow(final ViewHolderAfraz holder) {
        super.onViewAttachedToWindow(holder);




    }





    @Override
    public int getItemCount() {
        return listData.size();
    }


    public class ViewHolderAfraz extends RecyclerView.ViewHolder {
        TextView onvan, matn, chanellAdress;
        ImageView imgadress;

        public ViewHolderAfraz(final View itemView) {
            super(itemView);
            onvan = (TextView) itemView.findViewById(R.id.text_onvan_recycler);
            matn = (TextView) itemView.findViewById(R.id.text_matn_recycler);
            imgadress = (ImageView) itemView.findViewById(R.id.img_onvan_recycler);
            chanellAdress = (TextView) itemView.findViewById(R.id.text_tablegh_recycler);
            copyText=(ImageView)itemView.findViewById(R.id.img_copy_recycler);
            shareTextAndpic=(ImageView)itemView.findViewById(R.id.img_share_recycler);
            imgFav = (ImageView) itemView.findViewById(R.id.Like_fav_recycler);





            copyText.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    AriaLib ariaLib=new AriaLib(context);
                    ariaLib.Sharing().setClipboadText(G.list.get(getAdapterPosition()).getMatn());
                    Toast.makeText(context, "درکیبورد کپی شد", Toast.LENGTH_SHORT).show();

                }
            });

            shareTextAndpic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    save();
                    AriaLib ariaLib=new AriaLib(context);
                   String my_string =G.list.get(getAdapterPosition()).getMatn();
                    ariaLib.Sharing().ShareText(my_string,"اشتراک متن");




                }
            });







        }


حالا میشه توضیح بدید مشکل کار کجاست

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

آقا از استادید کسی بلد نیست؟

من مشکلم هنوز حل نشده ها 

چجوری بیام یه رشته رو بگیرم از دیتابیس انلاین و چکش کنم ببینم اگه فعلا کد بود لایکشو توریسایکلرویوقراربده 

من این کدو نوشتم کار هم میکنه ولی یه مشکل داره اونم اینکه وقتی تو دیتابیس شماره 0 من در علاقمندیها هست میاد تو ریسایکلرویو در اندروید شماره 0و4 رو لایک شده قرار میده درحالی که فقط باید 0رو قرار بده

 

       favcheek=G.list.get((Integer) imgFav.getTag()).getUserid().equals("|"+G.UserId);


        if (favcheek == true) {
            imgFav.setImageResource(R.drawable.ic_favon_24dp);
        } else {
            imgFav.setImageResource(R.drawable.ic_favoff_24dp);
     }

و یه چیزه دیه اینکه من این مقدارو لوک میکنم 

       favcheek=G.list.get((Integer) imgFav.getTag()).getUserid().equals("|"+G.UserId);

و فقط ایتم شماره 0رو trueمیکنه و این یعنی این که اطلاعات دیتابیس و غیر مشکل ندارن فقط نمیدونم چرا شماره 4رو هم لایک میزنه؟

اساتید خواهشا دیه جواب بدید ممنون

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

آقا از استادید کسی بلد نیست؟

من مشکلم هنوز حل نشده ها 

چجوری بیام یه رشته رو بگیرم از دیتابیس انلاین و چکش کنم ببینم اگه فعلا کد بود لایکشو توریسایکلرویوقراربده 

من این کدو نوشتم کار هم میکنه ولی یه مشکل داره اونم اینکه وقتی تو دیتابیس شماره 0 من در علاقمندیها هست میاد تو ریسایکلرویو در اندروید شماره 0و4 رو لایک شده قرار میده درحالی که فقط باید 0رو قرار بده

 

       favcheek=G.list.get((Integer) imgFav.getTag()).getUserid().equals("|"+G.UserId);


        if (favcheek == true) {
            imgFav.setImageResource(R.drawable.ic_favon_24dp);
        } else {
            imgFav.setImageResource(R.drawable.ic_favoff_24dp);
     }

و یه چیزه دیه اینکه من این مقدارو لوک میکنم 

       favcheek=G.list.get((Integer) imgFav.getTag()).getUserid().equals("|"+G.UserId);

و فقط ایتم شماره 0رو trueمیکنه و این یعنی این که اطلاعات دیتابیس و غیر مشکل ندارن فقط نمیدونم چرا شماره 4رو هم لایک میزنه؟

اساتید خواهشا دیه جواب بدید ممنون

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

شما باید یدونه کلاس مدل درست کنید. بعد ایتمارو توش اضافه کنید ( مثلا از نوع رشته یا آیدی) و این کلاس رو ببرید تو لیست. تو قسمت رویداد کلیک هم باید آیتمای اون کلاسی رو که ساختین رو اپدیت کنید.

حالا این ایتمارو تو قسمت onBindViewHolder فراخوانی کنید. مشکل شما هم همین قسمته.

 

به نمونه زیر توجه بنمویید:

 

 

 

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

دوست عزی ممنون از پاسختون ولی آیا واقعا ببینم مشکل من از این قسمته به نظرت 

وقتی اطلاعات اولیه اشتباهی دریافت میشه چه ربطی به قسمت آپدیت لیست داره 

ازتون خواهشا میکنم یه بار توضیحاتی رو که دادم رو مرور بکنید بعد متوجه میشید

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

در 14 ساعت قبل، maryam22 گفته است :

دوست عزی ممنون از پاسختون ولی آیا واقعا ببینم مشکل من از این قسمته به نظرت 

وقتی اطلاعات اولیه اشتباهی دریافت میشه چه ربطی به قسمت آپدیت لیست داره 

ازتون خواهشا میکنم یه بار توضیحاتی رو که دادم رو مرور بکنید بعد متوجه میشید

سلام دوباره 

imgFav

اومدی تگ ش رو گرفتی ولی بهش تگ نمیدادی درسته؟

باید اینطوری باشه؟

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

مشکل تو تگ و چیزایه دیگه نیست چون همه رو تست کردم نمیدونم چرا وقتی تو دیتابیس انلاین یه رکورد لایک خورده چرا تو اندروید میاد 2رکورد رو به صورت لایکخورده نشون میده مشکل من اینه

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

سلام دوست عزیز

طوری که من فهمیدم ریسایکلر ویو میاد و توی لیست ایتمایی که لایک نشده رو هم لایک شده نشون میده

اگه ایتماتون زیاد باشه احتمالا هر هفت هشت آیتم یکی رو اینطوری نشون میده که میتونید با اضافه کردن کدای زیر به آداپترتون این مشکلو حل کنید :

 

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
   return position;
}

 

موفق باشید

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

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...