آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

۱۷ مطلب با موضوع «آموزش اندروید :: کتابخانه های مفید» ثبت شده است

برای اینکه دو تا ریکوئست پشت سر هم بزنیم، میشه از اپراتور flatMap توی rx استفاده کرد. آبجکتی که روی آن flatMap رو صدا میکنیم، باید observable باشه.

برای این کار خروجی دو تا ریکوئست رو از نوع observable تعریف میکنیم. روی ریسپانس ریکوئست اول flatMap میزنیم. flatMap توی ورودی یه فانکشن میگیره. ریسپانس ریکوئست اول ورودی این فانکشن هست. در واقع در بادی این فانکشن میشه روی ریسپانس ریکوئست اول manipulate انجام داد. در نهایت ریکوئست دوم رو return میکنیم و subscribe انجام میدیم. اگر ریکوئست اول به ارور بخوره، دومی انجام نمیشه و میره توی onError.

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۶ شهریور ۰۲ ، ۱۷:۲۱
میم دال

قدم اول:

برای رتروفیت باید dependency خودش و Gson converter رو اضافه کنیم. Gson converter دیتا مدل جاوا رو به جیسون تبدیل میکنه و برعکس (یعنی جیسون رو از سرور میگیره و به دیتا مدل جاوا تبدیل میکنه). در واقع توی رتروفیت ما با دیتا در قالب جیسون سر و کار نداریم. (در حالی که توی والی باید خودمون جیسون رو به آبجکت جاوایی تبدیل میکردیم و این نقطه مثبت رتروفیت به حساب میاد)

//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//gson converter
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ بهمن ۹۹ ، ۲۰:۲۳
میم دال

http متدهای زیادی داره که چهار تای اون که شامل get، post، put و delete است، پر استفاده تر هستن.

 

متد get از نوع read only هست و بنابراین نسبت به سه متد دیگر safe می باشد.

 

متدهای put، delete و post از نوع write هستند، یعنی در سرور دیتا مینویسند، بنابراین باید با احتیاط بیشتری از اونها استفاده کرد.

 

به متدهای get، put و delete متدهای idemponent گفته میشود. یعنی متدهایی که اگر عملکردشون چند بار هم تکرار بشه تغییری در خروجی ایجاد نمیکنه. بنابراین استفاده چند باره از این متدها نگرانی ندارد. تعریف idemponent در ویکیپدیا

 

به متد post متد non idemponent گفته میشود. یعنی متدی که تکرار عملکرد آن سبب تغییر در خروجی میشود. یعنی اگر چند بار این متد فراخونی بشه، دیتای مشابه در سرور ایجاد میشه که خوب نیست. بنابراین در استفاده از این متد باید دقت کرد.

 

متد post کش نمیشه، در حالی که متد get دیتا رو کش میکنه.

 

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۵ بهمن ۹۹ ، ۱۶:۳۳
میم دال

لینک های مرتبط:

 

1. متدهای http

 

2. این لینک w3schools هست و همه متدهای http رو به خوبی توضیح داده. انتهای صفحه یه جدولی هست که مقایسه خیلی خوبی بین متدهای get و post انجام داده.

 

3. نحوه ارسال دیتا در متد post

 

URI در واقع آدرس یک ریسورس هست که توی عکس زیر به خوبی نشون داده شده:

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ بهمن ۹۹ ، ۱۷:۵۵
میم دال

از این کتابخانه برای راحت شدن از شر findViewByID ها استفاده میشود.

 

خلاصه آموزش:

با نوشتن کد زیر یک تکست ویو به آی دی tv_noNetwork بایند میشود و در برنامه توسط tv_noNetwork به این ویو دسترسی داریم.

 

۰ نظر موافقین ۰ مخالفین ۰ ۰۶ دی ۹۹ ، ۰۲:۴۶
میم دال

برای اینکه یک فیلد سریالایز و دیسریالایز نشود، دو روش وجود دارد:

 

1. اون فیلد رو transient تعریف کنیم. اینجوری:

private transient Boolean isDeveloper;

در این صورت این فیلد در سریالایز وجود نخواهد داشت و در دیسریالایز حتا اگر در جیسون مقدار داشته باشد اما نال خواهد گرفت.

 

2. روش بهتر که استفاده از انوتیشن Expose است.

@Expose(serialize = true, deserialize = false)
private String email;

اینجا میگیم سریالایز بشه ولی دیسریالایز نشه. البته میشه آرگومان این انوتیشن رو خالی گذاشت. در این صورت هر دو کار انجام میشه.

 

هنگام استفاده از این انوتیشن Gson باید اینجوری تعریف شه:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

نکته: با این روش تعریف Gson، اگر فیلدی انوتیشن Expose رو نداشته باشه، سریالایز و دیسریالایز نخواهد شد.

 

۱ نظر موافقین ۰ مخالفین ۰ ۱۲ آذر ۹۹ ، ۰۹:۵۱
میم دال

انوتیشن SerializedName:

این انوتیشن اسامی فیلدها رو در سریالایزر و دیسریالایزر تغییر میده. اینجوری استفاده میشه:

 

public class User {

    @SerializedName("full_name")
    private String name;
    private String email;
    private int age;
    private Boolean isDeveloper;

    public User(String name, String email, int age, Boolean isDeveloper) {
        this.name = name;
        this.email = email;
        this.age = age;
        this.isDeveloper = isDeveloper;
    }
}

۰ نظر موافقین ۰ مخالفین ۰ ۱۲ آذر ۹۹ ، ۰۹:۰۸
میم دال

اگر متد سریالایز به صورت زیر باشد:

private void serialize() {

    User user = new User(
            "Maryam",
            "Maryamflower111@yahoo.com",
            28,
            null
    );

    Gson gson = new Gson();

    String s = gson.toJson(user);

}

۰ نظر موافقین ۰ مخالفین ۰ ۱۲ آذر ۹۹ ، ۰۷:۴۸
میم دال