در سال گذشته و قبل تر از اون، برنامه نویسی اندروید واقها پا به سن گذاشته و رشد کرده. اندروید استدیو و gradle  در هسته اون نقطه ای روشن در تاریکی بعد از ایکلیپس بودند. در کنار اونها یه سری از کتابخانه های متن باز وجود دارند که ما در اکثر کد نویسی هامون ازشون استفاده میکنیم. 


اینجا پنج تا از اونها رو گلچین میکنیم و یه لیست از بقیه رو قرار میدیم که خودتون برید دنبالشون. 

1- GSON 

جی سون (json نه) یه کتابخونه جاوا برای استفاده پردازش های اطلاعاتی در قالب json هست. یک کاری که شما شاید خیلی با اون درگیر باشید ارتباط با api هاست. ما معمولا از json استفاده میکنیم چون واضحه و خیلی از xml بهتر هست(خداییش راست میگه).


// Serialize 
String userJSON = new Gson().toJson(user);

// Deserialize
User user = new Gson().fromJson(userJSON, User.class);


این کتابخونه با یکی بعدی که معرفی میکنیم خیلی عالی هست... 



2-RETROFIT

تو سایت خودش نوشته: "این کتابخونه api های رست رو به اینترفیس های جاوا بدل میکنه". این واقعا یه راه خوب برای مدیریت فراخونی api ها در پروژه است. متد درخواست کننده و url مرتبط با هم به یک حاشبه اضافه میشند که کد شما رو ساده و آسون میکنه.


با این حاشیه نویسی شما به سادگی میتونید یک بدنه درخواست رو اضافه کنید، یک url یا هدر رو ویرایش کنید و یا پارامتر ها رو به کوئری هاتون بیافزایید.


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

public interface RetrofitInterface {

    // asynchronously with a callback
    @GET("/api/user")
    User getUser(@Query("user_id") int userId, Callback<User> callback);

    // synchronously
    @POST("/api/user/register")
    User registerUser(@Body User user);
}


// example
RetrofitInterface retrofitInterface = new RestAdapter.Builder()
            .setEndpoint(API.API_URL).build().create(RetrofitInterface.class);

// fetch user with id 2048
retrofitInterface.getUser(2048, new Callback<User>() {
    @Override
    public void success(User user, Response response) {

    }

    @Override
    public void failure(RetrofitError retrofitError) {

    }
});


این کتابخونه از GSON پیشفرض استفاده میکنه، پس برای parse کردن api ها و ورودی هاتون نیاز به نوشتن پارسر شخصی ندارید. دیگر تبدیل ها رو هم به خوبی براتون میتونه انجام بده.


3-EVENTBUS

این کتابخانه برای ساده سازی ارتباطات محتلف بین دو بخش از برنامه مفید است. مثلا، ارسال اطلاعاتی از اکتویتی به سرویسی که در حال اجراست، یا ارتباط خیلی ساده با فرگمنت ها. اینجا یه مثال میزنیم که چطور وقتی اینترنت قطع میشه یه اطلاعیه تو اکتویتی مون نشون بدیم:



public class NetworkStateReceiver extends BroadcastReceiver {

    // post event if there is no Internet connection
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        if(intent.getExtras()!=null) {
            NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
            if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
                // there is Internet connection
            } else if(intent
                .getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
                // no Internet connection, send network state changed
                EventBus.getDefault().post(new NetworkStateChanged(false));
            }
}

// event
public class NetworkStateChanged {

    private mIsInternetConnected;

    public NetworkStateChanged(boolean isInternetConnected) {
        this.mIsInternetConnected = isInternetConnected;
    }

    public boolean isInternetConnected() {
        return this.mIsInternetConnected;
    }
}

public class HomeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this); // register EventBus
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this); // unregister EventBus
    }

    // method that will be called when someone posts an event NetworkStateChanged
    public void onEventMainThread(NetworkStateChanged event) {
        if (!event.isInternetConnected()) {
            Toast.makeText(this, "No Internet connection!", Toast.LENGTH_SHORT).show();
        }
    }

}



4-ACTIVEANDROID


این کتابخانه یک مدل رابطه ای برای اندروید است. این کتابخونه کمک میکنه تا در بستر SQLite با دیتابیس خودتون در دستگاه تون بدون استفاده از دستورات SQL ارتباط برقرار کنید. یک شی که از مدل ActiveAndroid توسعه بشه (extend) میتونه اینطوری دیتابیس رو ذخیره بکنه:

user.save();

 که به راحتی با یک خط طولانی SQL برابره و میتونه جایگزینش باشه:

INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');

یک مثال برای گرفتن همه کاربران:

List<User> users = new Select().from(User.class).execute();

که کد  SQL مشابه اون این شکلی هست:

SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;

اکتیواندروید یه راه خیلی خوب برای حذف کدهای مزخرف ارتباط با دیتایس است. راه های متن باز دیگه ای هم مانند این کتابخونه وجود داره که GreenDAO و ORMLite نمونه هایی از اونها هستند.


5-یونیوسال ایمیج لودر 

universal image loader یا UIL یک کتابخونه ناهمگام (asyntask) هست، برای سادگی در لود کردن عکس ها و کش کردن اونهاست. استفاده از اون خیلی سرراست هست:

imageLoader.displayImage(imageUri, imageView);

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


 کتابخونه های متن باز خوب برنامه نویسی شما رو خیلی زیاد ساده و آسون میکنند. کتابخونه های پرطرفدار اغلب به خوبی تست شدند و برای استفاده هم خیلی آسون هستند. بیشتر این کتابخونه ها رو به راحتی در اندروید استدیو میتونید به کمک Maven به پروژه خودتون اضافه کنید. به پروژه خودتون برید و در قسمت dependencies فایل build.gradle میتونید اینطوری اونها رو به پروژه خودتون اضافه کنید»

dependencies {
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.squareup.okhttp:okhttp:1.3.0'
    compile 'com.squareup.retrofit:retrofit:1.3.0'
    compile 'de.greenrobot:eventbus:2.2.+'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1'
}

و با یکبار سینک کردن gradle اندروید استدیو تون به راحتی میتونید اونها رو در پروژه خودتون پیاده سازی کنید.


لینک های اضافی


یکی از بهترین راه های یادگیری درباره کتابخونه های اندرویدی خبرنامه اندروید android weekly (اینجا رو هم بخونید) است. یک خبر نامه هفتگی درباره برنامه نویسی اندروید. 

هم چنین، تعداد زیادی از برنامه نویسان خوب اندرویدی در توئیتر درباره اندروید توئیت میکنند، اینم چندتا از برنامه نویس های معروف اندرویدی در توئیتر:


  1. Jake Wharton
  2. Chris Banes
  3. Cyril Mottier
  4. Mark Murphy
  5. Mark Allison
  6. Reto Meier

این مطلب ترجمه آزادی بود از مقاله داریون پنیک در وبلاگ inifinum ... اگر مشکلی در ترجمه بود یا لحن ترجمه مناسب نبود پوزش ...