با سلام. امیدواریم حالتون خوب باشه و روز خوبی رو شروع کرده باشین. در مقاله های قبلی مباحثی از اندروید رو با هم بررسی کردیم. از آموزش TAB بگیریم تا ساختن یه دیتابیس معمولی و متصل کردنش به اندروید. امروزم میخوایم یکی از مباحث مهمی که تو بیشتر اپلیکیشن ها نقش مهمی داره رو باهم بررسی کنیم. یعنی اتصال برنامه های اندرویدمون به Server.
اول باید ببینیم که سرور چیه و چرا تو برنامه های اندرویدمون نیاز داریم بهش؟
نزدیک ترین و ساده ترین تعریفی که می تونیم برای تعریف سرور پیدا کنیم اینه که سرور یک کامپیوتر همیشه روشن و در دسترسه. وقتی دسترسی سرور به یه شبکه محلی و داخلی محدود باشه، سرور تحت شبکه محسوب میشه. یعنی همه ی کامپیوتر های این شبکه از یک کامپیوتر مرکزی دستور میگیرند و نیازهای خودشون رو به اون کامپیوتر مرکزی منتقل میکنن.
پس تو مبحث سرور، دو مورد کلی وجود داره:
سرور ( server ) : کامیپوتری که وظیفه ی سرویس دهی داره.
کلاینت ( Client ) : کامپیوتری که وظیفه ی سرویس گیری داره.
همونطور که در اول مقاله گفتیم، سرور مثل یک کامپیوتر مرکزی عمل میکنه و کلاینت ها، بقیه کامپوترهارو شامل میشن که دائما از سرور تقاضا دارند و اطلاعاتی رو از اون میگیرن.
حالا که با دو موجودیت کلی سرور آشنا شدیم، می خوایم ببینیم که چطوری می تونیم اطلاعاتمون رو از سمت سرور وارد اپلیکیشن اندرویدمون بکنیم؟
قبل از اینکه جواب سوال بالارو بتونیم بفهمیم، لازمه که به دو تامورد زیر توجه کنیم:
بطور کلی کاربرد سرور به دو صورت زیره:
تولید برنامههایی که اطلاعاتشون رو از سرور میگیرن.
تولید برنامههایی که برای بروز کردن اطلاعتشون به اطلاعات سرور نیاز دارند.
چیزی که باید بش توجه کنید، اینه که برای اینکه بتونید با سرور کار کنید، حتما باید از یه زبان سمت سرور مثل PHP، استفاده کنید. (برای اطلاعات بیشتر به دوره های آموزشی PHP کلیک کنید.)
شروع کار:
چیزایی که تا الان گفتم، بیشتر مقدمه ی کار بودن تا شما با مفهوم کلی سرور آشنا بشید. الان قدم به قدم باهم بقیه راهو ادامه می دیم.
یکی از بهترین و راحت ترین روش ها برای دریافت اطلاعاتمون از سرور محلی (Local)، قالب Json هست. پس برای شروع کار یک فایل به نام Server.php در مسیر لوکال سرور خودمون میسازیم. کد ساده ای که در زیر میبینید، یه آرایه خیلی ساده تو قالب Json هستش:
<?php $array= array( array( "نام", "لطفا نام خود را وارد کنید."), array( "نام خانوادگی", "لطفا نام خانوادگی خود را وارد کنید.") ); echo json_encode($array); ?>
چون برنامه اندرویدمون با سرور ارتباط داره،پس باید واسه مجوز دسترسی به اینترنت به Manifest بریم و کد زیرو قبل تگ application کنیم:
<uses-permission android:name="android.permission.INTERNET"/>
خب اینم از این. تو مرحله بعدی، باید کدهایی رو به طرف اندرویدمون اضافه کنیم تا بتونیم اطلاعاتو از سرور بگیریم. واسه این کار راه های زیادی هست که می تونید ازشون استفاده کنید اما پیشنهاد من به شما، کتابخانه Volley هستش. کار با این کتابخونه خیلی راحته و کارایی بالایی هم داره. این کلاس یکی از کلاسهای طراحی شده توسط گوگله که مخصوص دریافت اطلاعات از سروره.
خب همونطور که میدونید، برای اینکه بتونیم از این کتابخونه استفاده کنیم، باید اول به پروژمون اضافش کنیم.
compile 'com.android.volley:volley:2.0.1'
(همونطور که در مقاله های قبلی هم گفتیم، اگه نسخه ی اندروید استودیوتون 3 یا 3 به بالا باشه، به جای Compile، از Implementation استفاده می شه.)
خب بعد از اینکه کتابخانه ی Volley رو به پروژمون اضافه کردیم، حالا باید بریم به قسمت Main_Activity و کدهای زیر رو بهش اضافه کنیم:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JsonAry request = new JsonAry( Request.Method.POST, "http://192.168.1.88/getposts.php", null, new Response.Listener<JSON_Array>() { @Override public void onResponse(JSON_Array response) { Log.i("Get_Response: ", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.a("Get_Error: ", error.toString()); } });
خب چندتا نکته هست که باید در مورد کد بالا بگم. همونطور که می بینید در خط 6 یه آرایه به اسم JsonAry تعریف کردم. این آرایه 5 تا ورودی داره. ورودی هاشو باهم بررسی کنیم تا ببینیم چی هستن:
پارامترهای ورودی:
ورودی 1:
این آرگومان نوع درخواستمونو تشخیص میده که من متد POST رو ترجیح دادم. علت این کارم بخاطر اینه که تو متد GET، وقتی نوار جستجو رو میبنید اطلاعات زیادی رو میبینید. اگر تمایلی به این کار نداشته باشید و امنیت براتون مهم باشه، از متد POST استفاده کنید.
ورودی 2:
این ورودی، آدرس سروریه که می خوایم اطلاعاتو ازش بگیریم هستش. نکته ی مهمی که باید بش توجه کنید، اینه که ما فقط اجازه ی وارد کردن آدرس IP شبکه خودمون رو داریم. مثلا ما نمی تونیم از آدرس های رزرو شده یا Localhost استفاده کنیم. برای اینکه بتونیم IP شبکمونو بفهمیم، باید cmd رو اجرا کنیم و دستور ipconfig رو اجراکنیم. باید از قسمت IPv4 Address، آی پی که جلوش هست رو کپی کنیم و تو این ورودی قرارش بدیم.
ورودی 3:
پارامترهای ورودیو مشخص میکنه که ما null میزاریم این ورودی رو.
ورودی 4:
این قسمت که اسمش Response.Listener هستش، دستورات و استانداردایی هستن که در صورتی که عملیاتمون به درستی کار کرد، باید اجرا شن. در خط 13 همونطور ک میبینید، یک Log گذاشتم تا هر مقداری که از نوع Json هستش رو به رشته تبدیل کنه و تو قسمت Android monitor به ما نشون بده.
ورودی 5:
این ورودی دقیقا برعکس ورودی 4 عمل میکنه. یعنی اگه عملیاتمون درست کار نکرد، این آگومان اجرا میشه. درست مثل ورودی 4، واسه این ورودی هم یه Log تو خط 18 تعریف کردیم. مقدار دریافتی که از نوع VolleyError هست رو با toString به رشته تبدیلش کردم تا در Android monitor استودیو نمایش بده.
پردازش و نمایش اطلاعات Json:
خب حالا که کدهای بالارو تو Main_Activity اضافه کردیم، حالا می خوایم اطلاعات Json رو هم نمایششون بدیم. واسه این که اینکارو بکنیم، باید در متد onResponse اینکارو بکنیم. باید یه آرایه هم تعریف کنیم تا بتونیم با دستور getJSONArray آرایه هارو دریافت کنیم. واسه این کار کدهای زیر و اضافه میکنم:
public void onResponse(JSONArray response) { try { for (int i = 0; i < response.length(); i++) { JSONArray postArray = response.getJSONArray(i); Toast.makeText(MainActivity.this, PostArray.getString(0), Toast.LENGTH_SHORT).show(); Toast.makeText(MainActivity.this, PostArray.getString(1), Toast.LENGTH_SHORT).show(); } } catch (JSONException a) { Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show(); a.printStackTrace(); } }
همونطور که می بینید، در خط سوم، یه For تعریف کردم تا کل اجزا و آرایه های response رو بررسی کنیم.
خب الان پروژه ما کامله و میتونیم ازش خروجی بگیریم. اگه شما خروجی این پروژه رو بگیرید، میبینید که “نام خود را وارد کنید” که در Toast گذاشتیمش، نشون داده میشه.
خب امیدوارم که از خوندن این آموزش راضی باشید. امروز مطالبی که گفتیم، ساده و بیشتر جنبه ی آموزش داشتند. در مقاله های بعدی مثال های کاربردی تر و پیچیده تر خدمت حضورتون آماده میکنیم.
برای شرکت در دوره های آموزشی مجموعه پدیده تجارت، به قسمت دوره های آموزشی اندروید کلیک کنید. همچنین برای مشاهده ی اپلیکیشن های کاربردی اندروید، بر روی نمونه کارهای اندروید کلیک کنید. اگر مایل به سفارش اپلیکیشن اندروید نیز هستید، مجموعه پدیده تجارت با ده سال سابقه کار، عضو اتحادیه و با کوله باری از تجربه و دانش در خدمت شما خواهد بود. ما با آغوش باز، منتظر شروع همکاری شیرین و دوستانه با شما خواهیم بود.