کتابخانه volley در برنامه نویسی اندروید ، اتصال به سرور یک اصل مهم و اساسی در برنامه نویسی در تمامی زبان هاست.جاوا نیز از این قائده مستثنا نیست.برای اتصال به سرور در جاوا روش های مختلفی وجود دارد مثلا تا مدتی پیش از HttpClient ها استفاده میشد که کار با آن برای برنامه نویسان کمی دردسر ساز و پیچیده بود تا اینکه کتابخانه Volley پا به عرصه گذاشت و کار برنامه نویسان را بسیار ساده کرد.مدت زمان زیادی نیست که این کتابخانه وارد بازار برنامه نویسان شده و میتوان گفت از تکنولوژی های جدید برنامه نویسی است.در ادامه بیشتر با این کتابخانه و مزایای آن آشنا خواهیم شد.
اتصال برنامه کاربردی به اینترنت یک امر عادی و در اکثر اوقات ضروری است که در تمامی زبان ها باید به آن توجه شود.
در اندروید تا نسخه HoneyComb , اتصالات شبکه ای در Thread اصلی اجرا میشد(که این کار توصیه نمیشود) در نسخه های بعدی اندروید برنامه نویسان برای بهبود عملکرد , اتصالات شبکه ای را جدا از Thread اصلی یا به اصطلاح main Thread اجرا کردند. که در این روش برنامه نویس باید یک Asynctask را در یک Thread دیگر جدا از Main Thread اجرا کند.
با استفاده از کتابخانه Volley در اندروید میتوان از این کارهای خسته کننده دوری کرد!
Volley در واقع یک >کتابخانه< اندروید است که درخواست های شبکه را مدیریت میکند. Volley در واقع بسته ای از تمام ویژگی هایی است که ممکن است در اتصال به شبکه نیاز داشته باشید مثل دسترسی به Api های Json , بارگذاری تصاویر , درخواست های رشته ای و ..
همچنین این کتابخانه طراحی شده برای عملیات شبکه ای RPC (Remote Procedure Call) و بهترین گزینه برای پر کردن عناصر UI (لیست ویو ها و تکست باکس ها و…)
در کدنویسی برنامه خود شما باید یک درخواست Volley را ایجاد کنید که به این درخواست ها اصطلاحا صف میگویند. یک صف در Thread اصلی ایجاد و جواب یا اصطلاحا Response را دریافت میکند این جنبه از Volley بسیار برای پر کردن عناصر UI مناسب خواهد بود.
برای استفاده از این کتابخانه تنها کافی است فایل جاوای Volley را دانلود کرده (در کانال تلگرام ما موجود میباشد) و در مسیر ذخیره پروژه در فولدری به نام libs ذخیره کنید سپس باید در Gradle پروژه خود آن را بدین صورت اعلان کنید
dependencies { ... compile 'com.mcxiaoke.volley:library:1.0.19' }
سپس در نوار ظاهر شده بالا گزینه Sync Now را حتما کلیک کنید تا کدی ک نوشته اید اعمال شود(به تصویر زیر توجه کنید)
حال به راحتی میتوانید دستورات Volley را نوشته و اجرا کنید اما حتما و حتما به این نکته توجه کنید که در manifest برنامه مجوز استفاده از اینترنت را برای برنامه خود لحاظ کنید
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
برای درک بیشتر به مثال زیر که برای رجیستر و ثبت داده در جدول است دقت کنید
در ابتدا باید دستورات php را کدنویسی کرده و در محل مناسب ذخیره سازی کنیم که در صورت ذخیره سازی در محیط غیر از این مسیر F:\Programs\WampServer\wamp64\www باید virtual Diractory ایجاد کرد که ما برای راحتی کار فعلا در همین مسیر آنرا ذخیره میکنیم.
<?php insert(); function connectToDatabase(){ $connection=mysqli_connect("localhost", "root", "", "test"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } return $connection; } function insert(){ $connection = connectToDatabase(); $username= $_POST['username']; $email= $_POST['email']; $password= $_POST['password']; $result = mysqli_query($connection, "INSERT INTO register (username,password,email) VALUES ('$username' , '$password' , '$email')"); echo "Successfully Register"; }
ابتدا در MainActivity باید متغیر ها و فیلدهای مربوطه را تعریف کنیم حال هر کدام از این متغیرها چه نقشی دارند!؟
public static final String REGISTER_URL="http://10.0.3.2:8080/valleyregister.php"; public static final String KEY_USERNAME="username"; public static final String KEY_PASSWORD="password"; public static final String KEY_EMAIL="email";
متغیر رشته ای REGISTER_URL آدرس صفحه ای که دستورات PHP مربوط به INSERT را کدنویسی کرده ایم را مشخص میکند
****نکته قابل توجه در مورد URL که بخش مهمی از اتصال به سرور است آدرس هاست مورد نظر است به چه صورت؟
برای مثال در کدهای زیر از ۱۰٫۰٫۳٫۲ استفاده شده حال چه زمان باید از این HOST استفاده شود؟زمانی که بخواهیم از شبیه ساز های نصب شده بر روی سیستم استفاده کنیم و همچنین در ادامه آدرس هاست باید از :portnum استفاده کرد که سیستم من ۸۰۸۰ است(چون من از wamp استفاده میکنم و همانطور که همه میدانند میتوان به تغییر آدرس port پرداخت)
سه فیلد بعدی که با KEY_ نامگذاری آنها شروع شده پس مشخص است که یک کلید که مقدار ثابتی را دارد تعیین کرده شده.
این کلید ها در واقع همان نام فیلدهای جدول است و باید نسبت به حروف بزرگ و کوچک آن حساسیت نشان داد.
حال یک درخواست رشته ای ایجاد میکنیم و توجه کنید که از POST برای ارسال داده ها ارسال شده سپس دو متد onResponse , onErrorResponse باید override شوند تا درصورت جواب دادن و یا خطا دادن برنامه چه واکنشی از خودش نشان دهد.
و در انتها نیز متد getParams باید override شود زیرا ما باید سه پارامتر username , email , password را به دستورات php خود ارسال کنیم.
HasMap در واقع لیستی است که اطلاعات درون آن به صورت key:value ذخیره و با استفاده از مقدار key (کلید) مقدار value بازیابی میشود
public void registerUser() throws JSONException{ final String username=editTextUsername.getText().toString().trim(); final String password=editTextPassword.getText().toString().trim(); final String email=editTextEmail.getText().toString().trim(); StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String,String> getParams(){ Map<String,String> params = new HashMap<String, String>(); params.put(KEY_USERNAME,username); params.put(KEY_PASSWORD,password); params.put(KEY_EMAIL, email); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); }
در انتها نیز تنها کافی است درخواست را به صف اضافه کنیم.