خلاصه وظایف
- ارتباط با سرور و فرستادن رکوئست به آن ۸٪ امتیاز سوال
encode
کردن صحیح دادههای ارسالی به سرور ۸٪ امتیاز سوال- گرفتن پاسخ صحیح از سرور و نمایش آن در جای مناسب ۸٪ امتیاز سوال
- امکان پردازش چند درخواست بطور همزمان ۱۶٪ امتیاز سوال
- پایداری ارتباط با سرور درصورت تغییر وضعیت دستگاه (مانند چرخش) ۴۴٪ امتیاز سوال
- پایداری محتوای مورد نمایش در رابط کاربری درصورت تغییر وضعیت دستگاه (مانند چرخش) ۱۶٪ امتیاز سوال
در این سوال شما باید یک بازی شبیه به بازی بیست سوالی (بدون محدودیت سوال) را پیادهسازی کنید. به این صورت که شما سوالات خود را تایپ و ثبت میکنید، سپس سوال خود را به آدرس سرور ارسال میکنید و پس از پردازش سوال، پاسخی متناسب از طرف سرور به شما برمیگردد (پاسخ سرور صرفا شامل یک رشته بعنوان پاسخ سوال ارسالی است و هیچ ساختار خاصی ندارد). شما باید سوالات و پاسخ ها را در قسمت بالایی صفحه، بصورت گزارشی از تاریخچه عملکرد نمایش دهید؛ به این صورت که هر سوال بلافاصله پس از لمس دکمه submit
به لیست افزوده میشود، آخرین پاسخ ارسالی در last_answer_tv
نمایش داده میشود و با رسیدن پاسخ جدید از سمت سرور، متن موجود در last_answer_tv
، به history_tv
منتقل میشود و پاسخ جدید در last_answer_tv
نمایش داده میشود.
موارد مورد انتظار جهت پیادهسازی
۱- سوال کاربر باید در EditText با آیدی question_et تایپ شود و با لمس دکمه Submit برای پردازش، به سرور ارسال شود تا پاسخ سرور را در قالب یک رشته دریافت کند. دقت کنید متن سوال نمیتواند خالی باشد. نمونه درخواست ارسالی به سرور برای پرسیدن سوال ?what is length of the word
<YOUR_URL>?q=what+is+length+of+the+word%3F
نمونه پاسخ ارسالی سرور:
it contains 10 characters
۲- آخرین پاسخ دریافت شده از سرور باید در TextView با آیدی last_answer_tv نمایش داده شود.
۳- لیست تاریخچه سوالات کاربر و پاسخ های سرور (بجز آخرین پاسخ سرور) باید در TextView با آیدی history_tv نمایش داده شود.
۴- برنامه شما باید با تغییر جهت دستگاه، وضعیت فعلی خود (شامل اطلاعات نمایش داده شده به کاربر و اطلاعات موردنیاز جهت ادامه فعالیت بصورت صحیح) را حفظ کند.
۵- درصورتی که در هنگام ارتباط با سرور و انتظار برای پاسخ سرور، جهت دستگاه تغییر کرد (دستگاه rotate شد)، نباید خللی در ارتباط با سرور و دریافت پاسخ بوجود آید.
۶- درصورتی که کاربر سوالی را با استفاده از کلید Submit ثبت کند و پیش از پاسخگویی سرور، سوال (یا سوالات) دیگری را ثبت کند، ارسال سوالات به سرور باید در لحظه ثبت انجام شود (نباید ارسال سوال جدید و انتظار برای گرفتن پاسخ، تا زمان پاسخگویی سرور به سوال قبلی، به تعویق بیافتد).
موارد مورد توجه هنگام پیادهسازی:
-
درخواست ها به سرور توسط متد GET ارسال میشوند.
-
آدرس پایهای سرور را حتما در متغیر url که عضو ثابت کلاس BaseURL میباشد،قرار دهید و زمانی که به آن نیاز داشتید، از BaseURL.url استفاده کنید. (از بکار گیری آدرس پایه بطور مستقیم در کد، جدا خودداری کنید).
-
به هیچ وجه آیدی (id) های موجود در فایل activity_main.xml را تغییر ندهید.
توجه کنید که
+برای بررسی کدهای خود میتوانید از سرور محلی یا کتابخانههای موجود برای اندروید جهت شبیهسازی سرور استفاده کنید.
- محتویات فیلد
url`` موجود در کلاس
BaseURL``` فقط و فقط باید حاوی آدرس پایه باشد و هیچ کاراکتر اضافهای نباید بعد از آن قرارگیرد.
مثال صحیح:
public static String url = "http://quera.ir/";
مثال غلط:
public static String url = "http://quera.ir/?q=";
- برای ارسال پاسخ، دقت کنید پوشه
app
موجود در ریشه فایلهای پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد. - نوع، نام و محتویات اولیه کلاسهای موجود در فایل پایه را به هیچ وجه تغییر ندهید/حذف نکنید. (اضافه کردن بلامانع است.)
- پروژه ارسالی شما میتواند فایل های اضافه بر فایلهای موجود در پروژه پایه داشته باشد؛ این فایل ها باید بطور مستقیم یا غیرمستقیم در پوشه
main
قرارگرفته باشند. - امکان تغییر در فایل
manifest
وجود دارد. - درصورت استفاده از کتابخانههای ثالث جهت ارتباط با سرور، کد شما توسط سیستم داوری مردود اعلام میشود.
ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند، همچنین امکان افزودن فایل به ساختار ارسالی زیر وجود دارد اما از اعمال تغییر در محتویات پوشه layout
جداً خودداری کنید):
<your-zip-name>.zip
└───app
├───libs
└───src
└───main
│ AndroidManifest.xml
│
├───java
│ └───quera
│ └───androidchallenge
│ └───com
│ └───onlineguessword
│ │ MainActivity.java <------
│ │
│ └───models
│ BaseURL.java
│
└───res
├───drawable
│
├───drawable-v24
│
├───layout
│ activity_main.xml
│
├───mipmap-anydpi-v26
│
├───mipmap-hdpi
│
├───mipmap-mdpi
│
├───mipmap-xhdpi
│
├───mipmap-xxhdpi
│
├───mipmap-xxxhdpi
│
└───values
colors.xml
strings.xml
styles.xml
ارسال پاسخ برای این سؤال