انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

#1
سلام
من برای مطالبی که تو برنامم دارم یه ratingbar گذاشتم و مقدار دیفالت رو هم برای نمایش روش ست کردم. با امتیاز دهی توسط کاربر مقدار رو سمت سرور میفرستم و ذخیره می کنم. تو این مراحلش مشکلی ندارم.
اما چیزی که نمیدونم اینه :

یه ستون داریم به اسم rate که امتیاز رو مشخص میکنه
یه ستون داریم به اسم numrate که تعداد نفراتی که تاحالا امتیاز دادن رو حساب میکنه

خب، حالا شما فرض کن دیفالت امتیاز رو 5 هست و نفرات رو 1 ، اولین نفر میاد امتیاز میده من میام امتیاز فعلی رو با امتیاز موجود قبلی جمع می کنم و تقسیم به تعداد نفرات +1 می کنم یعنی این فرمول :

امتیاز قبلی : oldrate  = 5
امتیاز وارد شده: userrate   = 4
تعداد نفرات : numrate+1  = 2

امتیاز جدید = (oldrate+userrate) تقسیم بر numrate+1 که مساوی 4.5 میشه

خب واسه کاربر اول مشکلی نداره و سیستم درست هست.
اما مثلا برای کاربر دهم ما امتیاز قبلی مون برابر میانگین اون 9 نفر قبلی هست و مثلا شده 4 ، حالا اگه یکی بیاد 5 بده و ما همین فرمول رو بخوایم اجرا کنیم میشه 5 تقسیم بر 10 که میشه 0.5 ،

سیستم درست برای سیستم های امتیاز دهی چی هست که بقیه هم استفاده می کنند ؟
پاسخ

سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

#2
من فرمولش رو پیدا کردم. این کد ها رو نوشتم اما ارور داره:

کد پی‌اچ‌پی:
int total = ((Integer.parseInt(rate) * Integer.parseInt(nrate) ) + Integer.parseInt(newrate)) / (Integer.parseInt(nrate) + 1);
                
db.update_rate("ashpazi"zirgorohnameString.valueOf(total));
            } 

این ارور ها رو دارم :

کد پی‌اچ‌پی:
04-02 11:29:15.073E/InputEventReceiver(25563): Exception dispatching input event.
04-02 11:29:15.073E/MessageQueue-JNI(25563): Exception in MessageQueue callbackhandleReceiveCallback
04
-02 11:29:15.097E/MessageQueue-JNI(25563): java.lang.NumberFormatExceptionInvalid int"2.0"
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.Integer.invalidInt(Integer.java:137)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.Integer.parse(Integer.java:374)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.Integer.parseInt(Integer.java:365)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.Integer.parseInt(Integer.java:331)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at com.banooyeparsi.srp.ashpazi.Etelaat_ashpazi$2.onRatingChanged(Etelaat_ashpazi.java:96)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.widget.RatingBar.dispatchRatingChange(RatingBar.java:315)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.widget.RatingBar.onStopTrackingTouch(RatingBar.java:303)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:404)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.View.dispatchTouchEvent(View.java:7782)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2145)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1577)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.app.Activity.dispatchTouchEvent(Activity.java:2505)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2093)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.View.dispatchPointerEvent(View.java:7973)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4384)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4255)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3851)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3820)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3927)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3828)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3984)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3851)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3820)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3828)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6116)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6096)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6050)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6246)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.os.MessageQueue.nativePollOnce(Native Method)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.os.MessageQueue.next(MessageQueue.java:138)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.os.Looper.loop(Looper.java:150)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 11:29:15.097E/MessageQueue-JNI(25563):     at java.lang.reflect.Method.invoke(Method.java:51
04
-02 11:29:15.153E/AndroidRuntime(25563): FATAL EXCEPTIONmain
04
-02 11:29:15.153E/AndroidRuntime(25563): Processcom.banooyeparsi.srpPID25563
04
-02 11:29:15.153E/AndroidRuntime(25563): java.lang.NumberFormatExceptionInvalid int"2.0"
04-02 11:29:15.153E/AndroidRuntime(25563):     at java.lang.Integer.invalidInt(Integer.java:137)
04-02 11:29:15.153E/AndroidRuntime(25563):     at java.lang.Integer.parse(Integer.java:374)
04-02 11:29:15.153E/AndroidRuntime(25563):     at java.lang.Integer.parseInt(Integer.java:365)
04-02 11:29:15.153E/AndroidRuntime(25563):     at java.lang.Integer.parseInt(Integer.java:331)
04-02 11:29:15.153E/AndroidRuntime(25563):     at com.banooyeparsi.srp.ashpazi.Etelaat_ashpazi$2.onRatingChanged(Etelaat_ashpazi.java:96)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.widget.RatingBar.dispatchRatingChange(RatingBar.java:315)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.widget.RatingBar.onStopTrackingTouch(RatingBar.java:303)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.widget.AbsSeekBar.onTouchEvent(AbsSeekBar.java:404)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.View.dispatchTouchEvent(View.java:7782)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2322)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2027)
04-02 11:29:15.153E/AndroidRuntime(25563):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2145)
04-02 11:29:15.153E/AndroidRuntime(25563):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1577)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.app.Activity.dispatchTouchEvent(Activity.java:2505)
04-02 11:29:15.153E/AndroidRuntime(25563):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2093)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.View.dispatchPointerEvent(View.java:7973)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4384)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4255)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3851)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3820)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3927)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3828)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3984)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3851)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3820)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3828)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3801)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6116)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6096)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6050)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6246)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.os.MessageQueue.nativePollOnce(Native Method)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.os.MessageQueue.next(MessageQueue.java:138)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.os.Looper.loop(Looper.java:150)
04-02 11:29:15.153E/AndroidRuntime(25563):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-02 11:29:15.153E/AndroidRuntime(25563):     at java.lang.reflect.Method.invokeNative(Nat 

 
پاسخ

سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

#3
به float تغییر دادم درست شد
پاسخ

سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

#4
سلام.
مهمترین چیز در سیستم امتیازدهی سمت سرور، این است که کاربران نتوانند دو یا چند بار امتیاز بدهند. بنابراین ما باید یک جدول داشته باشیم که یک ستون آن برابر یک مشخصه منحصر بفرد از گوشی کاربر (شماره سریال گوشی) و ستون دیگری، برابر امتیازی که وی داده است باشد. پس وقتی نظری را در پایگاه داده ثبت می کنیم، باید شماره سریال گوشی را چک کنیم که تکراری نباشد. 
این جدول را که داشته باشیم، می توانیم معتبر بودن امتیاز جدید (که کاربر قبلا امتیاز نداده باشد) را چک کنیم. یک جدول هم برای نتیجه نهایی می گذاریم، یعنی با ثبت یک امتیاز جدید، نتیجه کلی امتیازها را در همان زمان در این جدول دوم قرار می دهیم. اینگونه، هر بار در نمایش امتیاز، نیازی نیست که شمارشی بر اساس جدول اول داشته باشم.
برای به دست آوردن شماره سریال گوشی، کلید زیر را بخوانید :

کلید شماره 2974


 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط داش بهروز

سیستم امتیازدهی سمت سرور (در برنامه نویسی اندروید)

#5
برای راحتی کار میتونید برنامه نویسی سمت سرور رو با php انجام بدین و مقادیر رو بهش با POST ارسال کنید ...
اونطرف توسط PHP دریافت و روی دیتابیس اعمال کنید ...
البته کد رندوم Admin هم یه راه عالی برای جلوگیری از تکرار هستش، کلا مباحث امنیتی پیچیده هستش .
پاسخ
 سپاس شده توسط داش بهروز ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان