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' }