آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

بر طرف کردن مشکل وجود فضای خالی در آدرس URL ، هنگام استفاده از HttpGet ، در برنامه نویسی اندروید

همان طور که می دانید، از HttpGet برای ارسال اطلاعات به یک صفحه اینترنت (یک صفحه از سرور) استفاده می شود و این ارسال اطلاعات، با روش GET می باشد. ویژگی روش GET این است که مقدار متغیری که در حال ارسال آن هستیم، در آدرس URL آن صفحه، نمایش داده می شود. مشکلی که از این بابت ممکن است به وجود بیاید، امکان بودن یک یا چند کاراکتر غیر مجاز برای URL ها، در مقدار متغیر می باشد که عملا باعث می شود که نتوانیم به صفحه مورد نظرمان ارتباظ برقرار کنیم (زیرا یک URL غلط ساخته می شود و بنابراین سرور آن را نمی پذیرد). مثلا فرض کنید که در مقدار مربوط به متغیرمان، یک فضای خالی (space) موجود باشد، بنابراین URL ای که ساخته می شود، غلط خواهد بود. برای جلوگیری از این مشکل، راه حلی در برنامه نویسی اندروید در نظر گرفته شده است که در ادامه آن را شرح می دهیم.

ابتدا کد زیر را در نظر بگیرید که در آن از HttpGet برای اتصال به یک صفحه از اینترنت (سرور مورد نظرمان) استفاده کرده ایم :


HttpClient httpclient = new DefaultHttpClient();
String variable_value = "kelidestan";
HttpGet httpget = new HttpGet("http://www.kelidestan.com/index.php?variable_name="
                                + variable_value);
try {
    HttpResponse response = httpclient.execute(httpget);
    if(response != null) {
        // some code
    } else {
        Toast.makeText(this, "Unable to complete your request", Toast.LENGTH_LONG).show();
    }
} catch (ClientProtocolException e) {
    Toast.makeText(this, "Caught ClientProtocolException", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
    Toast.makeText(this, "Caught IOException", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
    Toast.makeText(this, "Caught Exception", Toast.LENGTH_SHORT).show();
}

کد بالا، مقدار kelidestan را به عنوان مقدار متغیری با نام variable_name به صفحه اینترنتی زیر ارسال می کند (این یک فرض است و به اینکه آیا صفحه برای دریافت مقدار این متغیر طراحی شده یا نه، کاری نداریم) :


http://www.kelidestan.com/index.php

یعنی آدرس URL به صورت زیر خواهد بود :


http://www.kelidestan.com/index.php?variable_name=kelidestan

اما اکنون فرض کنید که به جای خط زیر از کدها :


String variable_value = "kelidestan";

کد زیر را بنویسیم :


String variable_value = "kelidestan site";

همان طور که مشاهده می کنید، یک فضای خالی (space) در مقدار متغیر وجود دارد که باعث می شود URL صفحه به صورت زیر نوشته شود :


http://www.kelidestan.com/index.php?variable_name=kelidestan site

این URL ، غلط است و باعث می شود که نتوانیم مقدار مورد نظرمان را به آن صفحه ارسال کنیم. برای رفع این مشکل، کدها را به صورت زیر تغییر می دهیم :


HttpClient httpclient = new DefaultHttpClient();
String variable_value = "kelidestan site";
variable_value = URLEncoder.encode(variable_value, "UTF-8");
HttpGet httpget = new HttpGet("http://www.kelidestan.com/index.php?variable_name="
                                + variable_value);
try {
    HttpResponse response = httpclient.execute(httpget);
    if(response != null) {
        // some code
    } else {
        Toast.makeText(this, "Unable to complete your request", Toast.LENGTH_LONG).show();
    }
} catch (ClientProtocolException e) {
    Toast.makeText(this, "Caught ClientProtocolException", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
    Toast.makeText(this, "Caught IOException", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
    Toast.makeText(this, "Caught Exception", Toast.LENGTH_SHORT).show();
}

که در آن، تنها خط زیر به کدها افزوده شده است :


variable_value = URLEncoder.encode(variable_value, "UTF-8");

اکنون مقدار kelidestan site به طور صحیح به صفحه مورد نظرمان ارسال خواهد شد زیرا مقدار متغیر(variable_value) را encode کرده ایم (به جای آن کاراکتر غیرمجاز، برخی کاراکترهای مجاز در آدرس URL قرار داده می شود، که البته نیازی به دانستن آنها نیست و افزودن همین کد، کافی است).

نکته

نیاز به ایجاد تغییر در صفحه اینترنتی (صفحه موجود در سرور) نیست و encode کردن مقدار متغیرها در کدهای برنامه اندروید، کافی است.

نکته مهم

همان طور که در کدهای قبل مشاهده کردید، تنها باید مقدار متغیرها را encode کنیم، نه کل آدرس URL . اگر کل آدرس URL را encode کنیم، با خطا روبرو می شویم. این نکته اهمیت زیادی دارد و ممکن است برنامه نویس به اشتباه کل URL را encode کند.

نویسنده علیرضا گلمکانی
شماره کلید 290
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 1 1 0
جعفر
۱۳۹۷/۰۱/۱۳
۰۰:۱۸

ممنونم
اموزشتون کاربردی و عالی بود
اگر ادرس را داخل مرورگر میزدم در هاست (به صورت utf-8) مینوشت ولی اگر از برنامه اندروید ارسال میکردم به هاستم به صورت علامت سوال مینوشت و همچنین فاصله بین کلمات را قبول نمیکرد.
این یک خط کد شما هر دو مشکل مرا حل کرد
یا علی

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)