في السنوات الأخيرة شهد نظام الأندرويد نموا كبيرا، إذ أصبح يغطي مجمل الأجهزة الإلكترونية الذكية. كما أن هذا التطور كان له تبعات على مستوى تطوير النظام حيث نشهد كل سنة إصدار جديد من نظام الأندرويد.
و إذا كنت من مطوري تطبيقات الأندرويد ستلاحظ انه هناك تعقيدات كثيرة في التطوير و تحتاج لجهد كبير من أجل إتمامها بالشكل المطلوب، من هنا ظهر مبدأ المكتبات التي تساعدنا على تجنب إعادة كتابة أكواد كبيرة و معقدة و قد تأخذ منا أياما كثيرة.
إذن صديقي في هذا المقال سوف أقدم لك 5 مكتبات يجب عليك العمل بها دائما في بدايتك لأي مشروع على نظام الاندرويد ستحتاجها لتطوير التطبيق الخاص بك و ستوفر عليك الكثير من المهام ايضا .
1- مكتبة GSON:
هي مكتبة بلغة الجافا تساعدنا على عمل serializing و deserializing للكائنات (Object) من و إلى (JSON) . هذه المهمة تحتاجها دائما عند إتصالك ب API . (من الأفضل دائما إستخدام JSON لانه أسهل و أخف من XML)
مثال :
// Serialize
String userJSON = new Gson().toJson(user);
// Deserialize
User user = new Gson().fromJson(userJSON, User.class);
2 - مكتبة RETROFIT
من وقعها نجد المطورين يقولون : "Retrofit turns your REST API into a Java interface. ” إنها حل أنيق لتنظيم إتصالاتك بالأنترنت و الوصول لنقاط API الخاصة بك . يكفي إنشاء ل Interface و إذراج مكونات API كرابط الإتصال و طريقة الوصول و المعطيات الراد إرسالها . المكتبة تستخدم نظام annotation الشيء الذي يجعل الكود الخاص بك أنيق و مرتب
مثال :
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) {
}
});
3 - مكتبة EVENTBUS
هي مكتبة تسهل الإتصال بين مختلف مكونات تطبيقك. مثلا عندما نريد إرسال شيئ من Activity إلى سيرفيس يشتغل حاليا بالطريقة التقليدية قد تكون المهمة صعبة نوعا ما . او عتدما تريد الإتصال بين fragments .
هذا مثال لإستخدام المكتبة عند الإتصال بالأنترنت او فقدان الإتصال :
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
هي مكتبة ORM للأندرويد (Object-relational mapping) و هي تجريد و تطوير عن SqLite التي تمكنك من الإتصال بقاعدة بيانات محلية على الجهاز و بدون كتابة أي صيغة SQL .
بحيث اي كائن يرث من ActiveAndroid يمكن حفظه بالشكل التالي :
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;
ActiveAndroid هي مكتبة رائعة لإزالة إستعلامات SQL المعقدة من التطبيق و التواصل بشكل رائع و سلس مع قاعدة البيانات بشكل مباشر وبدون تعقيد . يوجد ايضا مكتبات أخرى من هظا النوع مثل GreenDAO و ORMLite
5 - مكتبة UNIVERSAL IMAGE LOADER
هي مكتبة نمكن من تحميل و تخزين الصور بشكل غير متزامن حيث تقوم بالعمل في خلفية التطبيق و بدون تشويشات الشي الدي كنا نقوم به بإستخدام thread و AsyncTask .
مثال :
imageLoader.displayImage(imageUri, imageView);
ما رأيك في المكتبات التالية؟ و هل لديك أي مكتبات اخرى تستخدمها انت شخصيا ؟ شاركها معنا في تعليق .
picasso,glide للصور<br />butterknife لل binding<br />
مكتبة picasso<br />مكتبة vollay