Flutter Dev نشر 17 يونيو 2020 أرسل تقرير مشاركة نشر 17 يونيو 2020 (معدل) السلام عليكم ورحمة الله وبركاته استفسار ي اخوان لو تكرمتو كيف يمكن عمل نظام تقييم المنتج مثلا لدي تطبيق يعرض منتجات وارغب بجعل المستخدمين قادرين على تقييم المنتجات نجمه نجمتين ثلاث وما شابه وارغب بحفظ التقيم في قاعدة بيانات mysql واستعادتها بحيث تكون محفوظه من الفقد حاولت ابحث عن مثال ولكن لم اجد مثل هذا تم التعديل في 17 يونيو 2020 بواسطة مروان مروان3 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Mohamd Imran نشر 17 يونيو 2020 أرسل تقرير مشاركة نشر 17 يونيو 2020 بتاريخ 14 ساعات قال مروان مروان3: ياليت لو عندك مثال كيف اربطه باستخدام مكتبة Volley وكيف استعيد العدد او التقيم أهلا بك أخي @مروان مروان3 تمام أولا نحتاج إلى عمل ال api الخاص بإستلام البيانات القادمة من التطبيق وهي عدد النجمات في قسم السيرفر ,نقوم بعمل ملف php بسيط <?php include 'Config.php'; $con = mysqli_connect($HostName,$HostUser,$HostPass,$DatabaseName); $s_count = $_POST['stars_count']; $Sql_Query = "insert into Userd (stars_count) values ('$s_count')"; if(mysqli_query($con,$Sql_Query)){ echo 'Stars Count Inserted Successfully'; } else{ echo 'Try Again'; } mysqli_close($con); ?> ملاحظة لا تنسى تغيير include 'config.php' بالملف الخاص بك ,تمام هنا إنتهينا من جهة السيرفر قم بإعطاء الملف إسم مثلاً insert_stars.php نذهب إلى أندرويد إستديو نقوم بعمل requestqueue في الكلاس MainActivity مثلا RequestQueue requestQueue; وأيضا نقوم بعمل متغير من نوع string ونقوم بإعطائه الرابط للسيرفر الخاص بنا مع إسم الملف مثال String HttpUrl = "http://test.com/insert_stars.php"; والأن في ال onCreate ميثود نقوم بعمل طلب Volly جديد هكذا requestQueue = Volley.newRequestQueue(MainActivity.this); ونقوم بعمل ميثود من نوع StringRequest خارج ال onCreate ميثود هكذا StringRequest stringRequest = new StringRequest(Request.Method.POST, HttpUrl, new Response.Listener<String>() { @Override public void onResponse(String ServerResponse) { // Showing Server response coming from server. Toast.makeText(MainActivity.this, ServerResponse, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { // Showing Server Error message . Toast.makeText(MainActivity.this, volleyError.toString(), Toast.LENGTH_LONG).show(); } }) { قمت بإضافة توست لإظهار الرسالة القادمة من السيرفر في حالة نجاح إدخال البيانات وكذلك توست أخر في حالة حدوث خطأ وأيضا نقوم بعمل ميثود أخرى تقوم بإرجاع عدد النجمات أسفل الميثود الأولى @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); // Adding AllStars value to Params. params.put("stars_count", starsparam); return params; } }; لكن قم بتغيير الجزر الأول هنا params.put("stars_count", starsparam); وهو stars_count إلى إسم الحقل في قاعدة البيانات والجزء الثاني المتغير الخاص بعدد النجوم ,الأن جزء ال Volly نقوم بعمل طلب volly جديد ونقوم بتمرير الميثود الأولى له هكذا // Creating RequestQueue. RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this); // Add the stars StringRequest object into requestQueue. requestQueue.add(stringRequest); يمكنك إضافة السطرين إلى الميثود onCreate هكذا إنتهينا ,ولا تنسى إضافة ال internet permıssıon إلى ملف mainfest <uses-permission android:name="android.permission.INTERNET"/> الجزء أعلاه لإدخال عدد النجوم إلى قاعدة البيانات ,الأن بخصوص جزء إستعادة عدد النجوم من قاعدة البيانات ووضعها في ال ratingbar نبدأ سبق لك إستخدام volly لإرجاع البيانات هذا الجزء أتوقع سهل نقوم بعمل ميثود لذلك /** * Method to make json object request where json response to get StarsCount via Server { * */ private void starsCountJsonRequest() { JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, urlJsonObj, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d(TAG, response.toString()); try { // Parsing json object response // response will be a json object String starscount = response.getString("starsC"); jsonResponse = ""; jsonResponse += starscount; starsbar.numStars(jsonResponse); } catch (JSONException e) { e.printStackTrace(); Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); Toast.makeText(this, error.getMessage(), Toast.LENGTH_SHORT).show(); } }); // Adding request to request queue AppController.getInstance().addToRequestQueue(jsonObjReq); } طبعاً هنا starsbar هو ال RatingBar فيو هنا starsbar.numStars(jsonResponse); اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 Mohamd Imran نشر 17 يونيو 2020 أرسل تقرير مشاركة نشر 17 يونيو 2020 وعليكم السلام أخي @مروان مروان3 الأمر سهل ,يمكنك عمل ذلك من خلال إضافة Ratingbar فيو في الlayout الذي تريد هكذا <RatingBar android:id="@+id/RatingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> وقم بإعطاءه id معين ,والأن نقوم بالإشارة إليه(تفعيله initiate) في ال onCreate ميثود بعد setContentview بهذه الطريقة RatingBar simpleRatingBar = (RatingBar) findViewById(R.id.RatingBar); ونقوم بإرجاع عدد النجمات المختارة من قبل المستخدم من خلال الميثود getNumStars(); ستقوم بإرجاع عدد النجمات المختارة هكذا int Starscount = simpleRatingBar.getNumStars(); بعد ذلك يمكنك حفظ القيمة في قاعدة البيانات القيمة تخزن في المتغير Starscount ,وبخصوص الحفظ والإسترجاع من قاعدة البيانات هل تريد مثال لقاعدة بيانات محلية ؟أم بإستخدام api أي حفظ عن بعد 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 سمير عبود نشر 17 يونيو 2020 أرسل تقرير مشاركة نشر 17 يونيو 2020 مرحباً مروان تطبيق الأندرويد الخاص بك لا يستطيع التواصل مباشرة مع قاعدة البيانات MySQL وإنما يتم بناء واجهة برمجية API حيث أن التطبيق سيقوم بإرسال طلب ( request ) لهذه الواجهة و ترجع له رد ( response ) و يتم بناء هذه الواجهة بإستعمال إحدى لغات البرمجة التي تعمل في جانب الخادم فمثلا في حالتك عند تسجيل الدخول من طرف المستخدم من خلال التطبيق يتم التواصل مع الواجهة البرمجية بإرسال طلب بالمعلومات التي أدخلها المستخدم و بعدها تتم معالجة هذه البيانات من طرف ال back end و إرجاع رد للتطبيق. في حالة نجاح عملية تسجيل الدخول يتم إستعراض صفحات التطبيق التي تحتاج تسجيل الدخول أما في حالة فشل العملية يتم عرض رسالة خطأ للمستخدم مثلاً إذا نجح المستخدم في تسجيل دخوله للتطبيق يصبح بإمكانه عمل تقييم لمنتج و في هذه الحالة أيضا سيتم إرسال طلب او request للواجهة البرمجية و ستتم معالجة الطلب و حفظ البيانات في قاعدة البيانات و إرجاع رد للتطبيق ملاحظة: عملية التقييم لا تحتاج فقط إلى تسجيل الدخول بل إلى شرط إضافي و هو شراء المستخدم للمنتج الذي يريد أن يُقيِّمه هذه هي الفكرة بشكل عام و تتضمن نقطتين و هما : بناء الواجهة البرمجية و عمل حماية لها ربط التطبيق مع الواجهة البرمجية يتوجب عليك تجربة الواجهة البرمجية قبل ربط التطبيق معها بالتوفيق 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
1 ماجد قطوسة نشر 17 يونيو 2020 أرسل تقرير مشاركة نشر 17 يونيو 2020 بشكل عام تقيم النجوم يتم من خلال إحتساب عدد مرات تقيم المنتج و قيمة كل تقيم ، بمعنى أنه يجب عليك حفظ عدد مرات تقيم كل منتج في قاعدة البيانات و كل مرة يقيم فيها المستخدم منتج ما يزداد عدد مرات التقيم في قاعدة البيانات بواحد ، و يتم عمل معادلة جديدة تحسب التقيم الجديد الذي حصل عليه المنتج و تعديله في قاعدة البيانات - إليك المثال التالي :- // تقيم المنتج الحالي - من قاعدة البيانات double currRatingVal = barberDoc['rating']; // عدد مرات تقيم المنتج - من قاعدة البيانات int numOfRating = barberDoc['numOfRating']; // معادلة جديدة تحسب تقيم المنتج الجديد double finalRatingVal = ((currRatingVal * numOfRating) + ratingVal) / (numOfRating + 1); بعد ذلك، عليك أن تعدل قيمة تقيم المنتج داخل قاعدة البينات بناءً على القيمة الجديدة التي حصلت عليها ، و اضافة 1 على عدد مرات التقيم 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Flutter Dev نشر 17 يونيو 2020 الكاتب أرسل تقرير مشاركة نشر 17 يونيو 2020 (معدل) بتاريخ 1 ساعة قال Mohamd Imran: وعليكم السلام أخي @مروان مروان3 الأمر سهل ,يمكنك عمل ذلك من خلال إضافة Ratingbar فيو في الlayout الذي تريد هكذا <RatingBar android:id="@+id/RatingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> وقم بإعطاءه id معين ,والأن نقوم بالإشارة إليه(تفعيله initiate) في ال onCreate ميثود بعد setContentview بهذه الطريقة RatingBar simpleRatingBar = (RatingBar) findViewById(R.id.RatingBar); ونقوم بإرجاع عدد النجمات المختارة من قبل المستخدم من خلال الميثود getNumStars(); ستقوم بإرجاع عدد النجمات المختارة هكذا int Starscount = simpleRatingBar.getNumStars(); بعد ذلك يمكنك حفظ القيمة في قاعدة البيانات القيمة تخزن في المتغير Starscount ,وبخصوص الحفظ والإسترجاع من قاعدة البيانات هل تريد مثال لقاعدة بيانات محلية ؟أم بإستخدام api أي حفظ عن بعد هلا بيك عزيزي @Mohamd Imran شكرا على ردك عزيزي بنسبه ل نوع قاعدة البيانات mysql واستخدم Volley connection + php file علي سيرفر محلي wmap ياليت لو عندك مثال كيف اربطه باستخدام مكتبة Volley وكيف استعيد العدد او التقيم وعذرا على الازعاج بتاريخ منذ ساعة مضت قال عبود سمير: مرحباً مروان تطبيق الأندرويد الخاص بك لا يستطيع التواصل مباشرة مع قاعدة البيانات MySQL وإنما يتم بناء واجهة برمجية API حيث أن التطبيق سيقوم بإرسال طلب ( request ) لهذه الواجهة و ترجع له رد ( response ) و يتم بناء هذه الواجهة بإستعمال إحدى لغات البرمجة التي تعمل في جانب الخادم فمثلا في حالتك عند تسجيل الدخول من طرف المستخدم من خلال التطبيق يتم التواصل مع الواجهة البرمجية بإرسال طلب بالمعلومات التي أدخلها المستخدم و بعدها تتم معالجة هذه البيانات من طرف ال back end و إرجاع رد للتطبيق. في حالة نجاح عملية تسجيل الدخول يتم إستعراض صفحات التطبيق التي تحتاج تسجيل الدخول أما في حالة فشل العملية يتم عرض رسالة خطأ للمستخدم مثلاً إذا نجح المستخدم في تسجيل دخوله للتطبيق يصبح بإمكانه عمل تقييم لمنتج و في هذه الحالة أيضا سيتم إرسال طلب او request للواجهة البرمجية و ستتم معالجة الطلب و حفظ البيانات في قاعدة البيانات و إرجاع رد للتطبيق ملاحظة: عملية التقييم لا تحتاج فقط إلى تسجيل الدخول بل إلى شرط إضافي و هو شراء المستخدم للمنتج الذي يريد أن يُقيِّمه هذه هي الفكرة بشكل عام و تتضمن نقطتين و هما : بناء الواجهة البرمجية و عمل حماية لها ربط التطبيق مع الواجهة البرمجية يتوجب عليك تجربة الواجهة البرمجية قبل ربط التطبيق معها بالتوفيق هلا بيك اخوي شكرا على توضيح الفكره عزيزي بنسبه للي ذكرته انته في الاعلى اعرف اطبقه مافيه اي مشكله فيه كله واضح وتعامل مع قواعد البيانات وما سبق كله واضح ولكن لم يسبق لي اضافة نظام التقيم وربطه ب قاعدة بيانات وموضوع معين هذا المشكله التي تواجهني الشروحات التي وجدتها في الانترنت كلها لتقيم التطبيق او مجرد مثال بدون قاعدة بيانات اكرر شكري لك عزيزي تم التعديل في 17 يونيو 2020 بواسطة مروان مروان3 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Flutter Dev نشر 18 يونيو 2020 الكاتب أرسل تقرير مشاركة نشر 18 يونيو 2020 بتاريخ On 17/6/2020 at 09:38 قال Mohamd Imran: وعليكم السلام أخي @مروان مروان3 الأمر سهل ,يمكنك عمل ذلك من خلال إضافة Ratingbar فيو في الlayout الذي تريد هكذا <RatingBar android:id="@+id/RatingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> وقم بإعطاءه id معين ,والأن نقوم بالإشارة إليه(تفعيله initiate) في ال onCreate ميثود بعد setContentview بهذه الطريقة RatingBar simpleRatingBar = (RatingBar) findViewById(R.id.RatingBar); ونقوم بإرجاع عدد النجمات المختارة من قبل المستخدم من خلال الميثود getNumStars(); ستقوم بإرجاع عدد النجمات المختارة هكذا int Starscount = simpleRatingBar.getNumStars(); بعد ذلك يمكنك حفظ القيمة في قاعدة البيانات القيمة تخزن في المتغير Starscount ,وبخصوص الحفظ والإسترجاع من قاعدة البيانات هل تريد مثال لقاعدة بيانات محلية ؟أم بإستخدام api أي حفظ عن بعد هلا بيك عزيزي @Mohamd Imran شاكر لك ي غالي كثير والسموحة والعذر لني تعبتك معي كثير ربي يرزقك جنات النعيم يا رب 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Flutter Dev
السلام عليكم ورحمة الله وبركاته
استفسار ي اخوان لو تكرمتو
كيف يمكن عمل نظام تقييم المنتج
مثلا لدي تطبيق يعرض منتجات وارغب بجعل المستخدمين قادرين على تقييم المنتجات
نجمه نجمتين ثلاث وما شابه
وارغب بحفظ التقيم في قاعدة بيانات mysql واستعادتها
بحيث تكون محفوظه من الفقد
حاولت ابحث عن مثال ولكن لم اجد
مثل هذا
رابط هذا التعليق
شارك على الشبكات الإجتماعية
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.