[فایل پایه را از اینجا دانلود کنید](https://blog.quera.ir/wp-content/uploads/2018/05/urlInfo_contestant.zip)
در این سوال میخواهیم از شما در تکمیل برنامه زیر کمک بگیریم تا بتوانیم به کمک این برنامه جوابهای برگشتی ```RESTfulAPI``` ها را بررسی کنیم. شکل کلی برنامه بصورت زیر است:
![توضیح تصویر](http://bayanbox.ir/view/3852271260096033683/app.jpg)
در ``EditText`` اول (که با عبارت راهنمای ``enter URL here`` مشخص شده)، یک آدرس که در حقیقت یک ``RESTfulAPI`` است و از متد ``GET`` استفاده میکند، وارد میشود. با لمس دکمه ``SUBMIT``، برنامه یک درخواست به آدرس نوشتهشده ارسال میکند و زمانیکه پاسخ سرور را دریافت کرد، اطلاعات موجود در ``body`` را در ``TextView`` اول، (با متن راهنمای ``put response here``) نمایش میدهد و اطلاعات برگشتی ``header`` با نام ``Quera`` را در ``TextView`` دوم، (با متن راهنمای ``put header contents here``) قرار میدهد.
بعنوان مثال:
آدرس ورودی:
```
http://yourURL.com/myAPI/forAndroid
```
پاسخ دریافتی از سرور در ``body``:
```
this is your body response
```
پاسخ دریافتی از سرور در ``header``:
```
vary: Accept-Encoding,Cookie
x-amz-cf-id: sClUmMWJ6nQzm-1gOnHylGR7NQ9LtAF1FtDifjG3i_2SzsQ2bs-JYQ==
x-cache: Miss from cloudfront
x-content-type-options: nosniff
Quera: this is target header
```
عبارت نمایش داده شده در ``TextView`` اول:
```
this is your body response
```
عبارت نمایش داده شده در ``TextView`` دوم:
```
this is target header
```
# نکات حیاتی
+ برای جلوگیری از بروز خطای ناشی از حجم بالای فایل ارسالی، قبل از ساخت و ارسال فایل ``zip`` دقت کنید که پوشههای ``build`` در این فایل **وجود نداشته باشند**.
+ دقت کنید که به انتهای پاسخی که از سرور در ``body`` یا ``header`` دریافت میکنید، کاراکترهایی مانند ``\n`` و مانند آن **اضافه نکنید**.
+ در ساختار فایل پایه، کلاسی با نام ``BaseURL`` وجود دارد که حاوی فیلد رشتهای ``url`` است؛ دقت کنید که این کلاس در فرآیند تکمیل فایل پایه و رسیدن به خواسته سوال **هیچ نقشی ندارد** و نباید درخواستی به محتویات آن ارسال شود. این فایل صرفا در فرآیند داوری سوال مورد استفاده قرار میگیرد.
+ استفاده از کتابخانه (مانند reftofit, volley و ...) مجاز نمیباشد.
ساختار فایل پایه که برای تکمیل در اختیار شما قرار میگیرد، حاوی مسیر زیر است. شما باید فایلهایی که با علامت (---->) مشخص شدهاند را تغییر دهید و پروژه تغییردادهشده را بعنوان فایل ``zip`` که حاوی مسیر زیر است ارسال کنید:
(تغییر فایلهای **تعیین شده در قسمت پایین** و افزودن فایل جدید به فایل پایه **در پوشه ``main`` از مسیر زیر،** مانعی ندارد)
```
app
│
└───src
└───main
│ AndroidManifest.xml <----
│
├───java
│ └───android
│ └───quera
│ └───com
│ └───urlinfo
│ BaseURL.java
│ MainActivity.java <----
│
└───res
├───drawable
│ ic_launcher_background.xml
│
├───drawable-v24
│ ic_launcher_foreground.xml
│
├───layout
│ activity_main.xml
└───values
colors.xml
strings.xml
styles.xml
```
[فایل پایه را از اینجا دریافت کنید](https://blog.quera.ir/wp-content/uploads/2018/05/signUpWizard_contestant.zip)
در این سوال از شما میخواهیم تا یک ``ViewPager`` را پیادهسازی کنید که مانند تصویر زیر عمل کند:
![توضیح تصویر](https://blog.quera.ir/wp-content/uploads/2018/05/board.png)
![توضیح تصویر](https://blog.quera.ir/wp-content/uploads/2018/05/2018-05-25_13-39-28.gif)
# وظایف:
+ ``ViewPager`` موردنظر باید بصورت بینهایت (یا دایرهای) پیادهسازی شود؛ یعنی درصورتیکه از صفحه اول (یا آخر) ``ViewPager`` شروع به ورقزدن کنیم تا به صفحه آخر (یا اول) برسیم، درصورتیکه یکبار دیگر در همان جهت قبلی ورقبزنیم، مجددا محتوای صفحهای که از آن شروعکردیم را ببینیم. (انگار تا به حال ``ViewPager`` ورقنخورده)
+ با لمس دکمه ``Right`` امکان ورقزدن به سمت راست غیرفعال میشود و درصورت لمس دوباره این دکمه، این امکان مجددا فعال میشود.
+ با لمس دکمه ``Left`` امکان ورقزدن به سمت چپ، غیرفعال میشود و درصورت لمس دوباره این دکمه، این امکان مجددا فعال میشود.
# نکات حیاتی:
+ برای ``ViewPager`` **حتما** از آیدی ``circular_viewpager`` استفاده کنید.
+ میزان طول و عرض ``ViewPager`` به گونه ای مشخص کنید که تمام صفحه را اشغال کند.
+ آیدی دکمه های ```Left``` و ```Right``` را **تغییر ندهید**.
+ متنی که باید در هر صفحه نمایش داده شود، در آرایه ```content``` قرار داده شده.
+ از تمام محتوای آرایه ``content`` باید استفاده شود.
+ برای جلوگیری از بروز خطای ناشی از حجم بالای فایل ارسالی، قبل از ساخت و ارسال فایل ``zip`` دقت کنید که پوشههای ``build`` در این فایل **وجود نداشته باشند**.
ساختار فایل پایه که برای تکمیل در اختیار شما قرار میگیرد، حاوی مسیر زیر است. شما باید فایلهایی که با علامت (---->) مشخص شدهاند را تغییر دهید و پروژه تغییردادهشده را بعنوان فایل ``zip`` که حاوی مسیر زیر است ارسال کنید:
(تغییر فایلهای **تعیین شده در قسمت پایین** و افزودن فایل جدید به فایل پایه **در پوشه ``main`` از مسیر زیر،** مانعی ندارد)
```
app
│
└───src
└───main
│ AndroidManifest.xml
│
├───java
│ └───android
│ └───quera
│ └───com
│ └───signupwizard
│ └───MainActivity.java <------
│
└───res
├───drawable
├───drawable-v24
├───layout
│ activity_main.xml <------
│
├───mipmap-anydpi-v26
│
├───mipmap-hdpi
│
├───mipmap-mdpi
│
├───mipmap-xhdpi
│
├───mipmap-xxhdpi
│
├───mipmap-xxxhdpi
│
└───values
strings.xml
styles.xml
```