در مطلب قبلی نحوه گرفتن اطلاعات از اینترنت را به صورت خیلی ساده گفتیم. در این مطلب میخواهیم شیوه ارسال اطلاعات به یک سرور را به کمک کتابخانه بسیار مفید OkHttp آموزش بدهیم.
در مطلب مثالی زدیم که یک فایل متنی را از اینترنت گرفته و متن آن را استخراج کرده و به صورت یک رشته متنی به ما برمیگرداند. در این مطلب ساده و کوتاه میخواهیم یک رشته متنی را به یک سرور بفرستیم. با کمک OkHttp کار بسیار سادهای است:
// ۱ public static final MediaType MEDIA_TYPE_TEXT_PLAIN = MediaType.parse("text/plain; charset=utf-8"); // ۲ private final OkHttpClient client = new OkHttpClient(); // ۳ String postBody = "Hello world!"; // ۴ Request request = new Request.Builder() .url("https://api.github.com/markdown/raw") .post(RequestBody.create(MEDIA_TYPE_TEXT_PLAIN, postBody)) .build(); // ۵ Response response = client.newCall(request).execute(); // ۶ if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); // ۷ Log.v(response.body().string());
توضیح:
۱- ابتدا مشخص میکنیم که اطلاعاتی که قرار است بفرستیم از چه نوعی است. برای این کار از کلاس MediaType استفاده میکنیم. در این مثال یک نمونه از کلاس MediaType میسازیم که مشخص میکند نوع اطلاعات ارسالی متن ساده است. انواع بسیار متنوعی از MediaType میتوان تعریف کرد که در مطالب بعدی آنها را معرفی خواهیم کرد.
۲- همانطور که در مطلب قبلی هم گفتیم کلاس OkHttpClient قلب اصلی OkHttp است و همه کار را این کلاس انجام میدهد. بنابراین لازم است که یک نمونه از این کلاس بسیازیم.
۳- متنی را که میخواهیم ارسال کنیم، را در یک متغیر ذخیره میکنیم.
۴- حالا وقت آن است که یک نمونه از کلاس Request بسازیم و همه اطلاعات از جمله آدرس یا Url سرویس در سمت سرور و اطلاعاتی که میخواهیم ارسال کنیم را به این نمونه بدهیم. تابع post با کمک تابع create از کلاس RequestBody اطلاعات نوع اطلاعات یا MediaType و متنی که میخواهیم ارسال کنیم را میگیرد و آنها را در Request ذخیره میکند.
۵- حالا وقت آن است که درخواست یا Request ایجاد شده را به کمک نمونه ساخته شده از OkHttpClient اجرا کنیم.
۶- از آنجایی که این درخواست به صورت همزمان اجرا میشود، برنامه چند ثانیهای در این خط متوقف میماند تا پاسخی از سرور دریافت کند. پاسخ را بررسی میکنیم و اگر خطایی رخ داده باشد، این خطا را مدیریت میکنیم.
۷- اگر خطایی رخ نداده باشد، پاسخ سرور را گرفته و متن آن را در لاگ چاپ میکنیم.
ساده است! هنوز برای کار با اینترنت راه زیادی باید برویم! با ما باشید و نظرات خود را با ما در میان بگذارید.
داخل متد OnCreate باید نوشته بشه این کدها یا بیرونش ؟