کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش شبکه سازی در اندروید

 

clip_image001

دوره آموزش برنامه نویسی اندروید

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد

آموزش شبکه سازی در اندروید  

انجام عملیات HTTP با سیستم اندروید

این مبحث از سری مقاله های آموزش برنامه نویسی اندروید نحوه ی دسترسی به منابع وب از طریق HTTP در اندروید را شرح می دهد.

فهرست محتوا

1. توضیح مختصری در باب access HTTP در محیط اندروید

رابط های برنامه سازی کاربردی (API) رسمی موجود

مجوز های لازمه

کتابخانه های منبع آزاد

2. رویه های کارامد برای دسترسی به شبکه تحت اندروید

3. جاوا و دسترسی HTTP

4. بررسی در دسترس بودن و وضعیت اتصال به شبکه

5. Proxy

6. سوکتهای وب

 1. توضیح مختصری در باب access HTTP در محیط اندروید

رابط های برنامه سازی کاربردی (API) رسمی موجود

سیستم اندروید حاوی بسته ی java.net است که از آن به منظور دسترسی به منابع اندروید استفاده می شود. کلاس پایه برای دسترسی به شبکه در این بسته، کلاس HttpURLConnection می باشد.

 نکته

اندروید همچنین شامل کتابخانه ی Apache HttpClient می باشد که دیگر استفاده از آن چندان طرفدار ندارد. این امر بخاطر این است که کمپانی گوگل تمام تلاش و تمرکز خود بر روی بهینه سازی HttpURLConnection متمرکز کرده است.

مجوز های لازمه

برای اینکه برنامه بتواند به اینترنت دسترسی داشته باشد مجوز android.permission.INTERNET را لازم دارد.

به منظور بررسی وضعیت شبکه نیز اپلیکیشن به مجوز android.permission.ACCESS_NETWORK_STATE احتیاج دارد.

کتابخانه های منبع آزاد

اجرای عملیات شبکه ای روی اندروید می تواند کمی سنگین باشد، شما مجبورید اتصالات را باز و بسته کرده و حافظه های پنهان را فعال سازی کنید و همچنین سعی کنید عملیات شبکه را در نخ پس زمینه (background thread) اجرا کنید.

جهت آسان سازی عملیات ذکر شده، کتابخانه های منبع آزاد محبوب و پرکاربرد زیادی وجود دارد. کارامدترین این کتابخانه ها عبارتند از

 Volley

OkHttp

2. رویه های کارامد برای دسترسی به شبکه تحت اندروید

حین کار با یک برنامه ی کاربردی اندروید سعی کنید تا حد امکان از اجرای عملیات سنگین و طولانی در نخ رابط کاربری (UI thread) خودداری کنید، این شامل دسترسی شبکه و فایل می شود.

از ویرایش 3.0 به بعد اندروید معروف به Honeycomb، سیستم طوری پیکربندی و طراحی شده که اگر دسترسی به شبکه از طریق نخ رابط کاربری صورت گیرد، با استثنای NetworkOnMainThreadException برخورد کرده و سیستم از کار می افتد ( crashرخ می دهد).

اگرچه می توان از طریق یک fragment یا activity به شبکه دسترسی پیدا کرد، بکارگیری service برای این منظور گزینه ی مناسب تری می باشد، زیرا که از این طریق کد شما در activity ساده تر شده و در نتیجه طراحی کلی بهبود می یابد.

نکته

برای آزمایش می توانید با بهره گیری از تکه کد زیر، در نخ اصلی (main thread) دسترسی به شبکه را فراهم کنید (در ابتدای متد onCreate () اکتیویتی مورد نظر).

StrictMode.ThreadPolicy policy = new StrictMode.
        ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(
policy
);

  3. جاوا و دسترسی HTTP

جاوا به منظور دسترسی به منابع از طریق پروتکل HTTP یا HTTPS، API سرویس گیرنده همه منظور، کم حجم و سبک HTTP را در نظر گرفته است. کلاس های اصلی که جهت دسترسی به اینترنت بکار گرفته می شوند عبارتند از کلاس java.net.URL و کلاس java.net.HttpURLConnection.

از کلاس URL برای تعریف یک اشاره گر (pointer) به منبع وب و از کلاس HttpURLConnection جهت دسترسی به منبع وب استفاده می شود.

HttpURLConnection به برنامه نویس اجازه می دهد یک InputStream ایجاد کند.

پس از ایجاد InputStream، می توانید آن را درست مشابه InputStream از یک فایل محلی بخوانید.

در آخرین نسخه HttpURLConnection از transparent response compression (از طریق سرآیند Accept-Encoding: gzipindication Server Name (پسوند SSL و TLS) و response cache پشتیبانی می کند.

API (رابط برنامه سازی کاربردی) آن به نسبت ساده است، به عنوان نمونه می توانید به منظور بازیابی صفحه وب www.tahlildadeh.com مانند مثال زیر عمل کنید.

 try {
    URL url =
new URL("http://www.tahlildadeh.com");
    HttpURLConnection con = (HttpURLConnection) url
          .openConnection();
    readStream(con.getInputStream());
}
catch (Exception e) {
   
e.printStackTrace();
}

private void readStream(InputStream in) {
    BufferedReader reader =
null;
   
try {
        reader =
new BufferedReader(new InputStreamReader(in));
        String line =
"";
       
while ((line = reader.readLine()) != null) {
            System.
out.println(line);
        }
    }
catch (IOException e) {
        e.printStackTrace();
    }
finally {
       
if (reader != null) {
           
try {
                reader.close();
            }
catch
(IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Javadoc کلاس مزبور توصیه می کند از HttpURLConnection دوباره استفاده نکنید. چنانچه از این توصیه پیروی کنید خواهید دید که HttpURLConnection دیگر به مشکل نخ کشی (threading) برنخواهد خورد زیرا که دیگر بین چندین نخ تقسیم نمی شود.

4. بررسی در دسترس بودن و وضعیت اتصال به شبکه

شبکه در یک دستگاه اندروید همیشه قابل دسترسی نیست. جهت بررسی وضعیت اتصال به شبکه می توانید از کد زیر بهره بگیرید.

public boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
   
// if no network is available networkInfo will be null
    // otherwise check if we are connected
   
if (networkInfo != null && networkInfo.isConnected()) {
       
return true;
    }
   
return false;
}

لازم به ذکر است که برای انجام این کار به مجوز ACCESS_NETWORK_STATE نیاز پیدا خواهید کرد.

5. Proxy

می توان proxy را با استفاده از کلاس Settings ست کرد، برای مثال می توان خط زیر را به متد onCreate () در activity اضافه کرد.

Settings.System.putString(getContentResolver()، Settings.System.HTTP_PROXY، "myproxy:8080");

جهت تغییرSettings  Proxy، باید مجوز android.permission.WRITE_SETTINGS را در فایل AndroidManifest.xml تعریف کرد.

6. سوکتهای وب

سوکت ها در واقع یک استاندارد بر پایه ی HTTP هستند که به منظور برقراری ارتباط مبتنی بر پیام های ناهمگام بین سرویس گیرنده و سرویس دهنده بکار می روند. جهت راه اندازی ارتباط با وب سوکت، باید یک درخواست HTTP GET با سرآیندهای مخصوص HTTP  ایجاد کنید. چنانچه سرویس دهنده / سرور این درخواست را پذیرفت، در آن صورت سرویس دهنده و سرویس گیرنده (کلاینت( می توانند بین هم پیام رد و بدل کنند.

پیام ها ممکن است متن یا داده ی دودویی (binary data) بوده و از این رو به نسبت از حجم کمی برخوردار باشند (و آن به این خاطر است که پروتکل وب سوکت بیشتر با payload های کوچک در داده بکار می روند).

توصیه می شود از JSON به عنوان قالب بندی پیام ها استفاده شود.

1394/07/27 5446 2955
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...