خلاصه وظایف
- ارتباط با سرور و فرستادن رکوئست به آن ۸٪ امتیاز سوال
 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
ارسال پاسخ برای این سؤال