Top 5 Android libraries

1.GSON

Gson คือ Java library
สำหรับ serializing และ deserializing java objects , หรือจัดการเกี่ยวกับ JSON
เช่นสื่อสารผ่าน APIs.

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

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



2.RETROFIT

สำหรับการจัดการระบบ API ภายในโปรเจค
Request method และ relative url ที่มีคำอธิบายประกอบทำให้โค้ดสะอาดและง่าย 
Retrofit ใช้งาน Gson โดย default ดังนั้นจึงไม่ต้องทำการ custom parsing


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

Eventbus คือไรบลารี่ที่ช่วยให้การสื่อสารระหว่างส่วนต่างๆของ Application ง่ายขึ้น
ยกตัวอย่างการส่งอะไรบางอย่างจาก Activity ไปยัง Running Service
และง่ายต่อการทำงานร่วมกันระหว่าง fragments

ด้านล่างนี้คือตัวอย่างถ้า Internet เกิด lost ให้แสดง popup แจ้งเตือนผู้ใช้

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
ActiveAndroid คือ ORM (Object Relational Mapping)
ใช้สำหรับทำงานกับ Databases  โดยไม่ต้องเขียนคำสั่ง SQL Statement
เพราะ Object ที่ extends ActiveAndroid Model
สามารถบันทึกข้อมูลลงไปใน database ได้ดังนี้

Item item = new Item();
item.category = restaurants;
item.name = "Outback Steakhouse";
item.save();
 
ถ้าเขียนเป็นคำสั่ง SQL
INSERT INTO Users (category, name) VALUES ('restaurants','Outback Steakhouse');

ตัวอย่างการเรียกดู User ทั้งหมด
List<User> users = new Select().from(User.class).execute();
 
ซึ่งถ้าเขียนเป็นคำสั่ง SQL จะได้แบบนี้
SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;




5. UNIVERSAL IMAGE LOADER

การโหลดภาพมาใส่ imageView ทำได้ดังนี้
imageLoader.displayImage(imageUri, imageView);

UIL คือ library ทำงานแบบ asynchronous
ความสามารถของ UNIVERSAL IMAGE LOADER 
ที่โดดเด่นก็คงเป็นการ fetching และ caching พวกรูปภาพขนาดใหญ่ๆที่ Picasso ไม่สามารถทำได้



 
การติดตั้งผ่าน build.gradle file
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'
}