多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Android開發者必知的5個開源庫

Android開發者必知的5個開源庫

來源:程序員人生   發布時間:2014-09-06 08:17:00 閱讀次數:2010次

過去的時間里,Android開發逐步走向成熟,一個個與Android相關的開發工具也層出不窮。不過,在面對各種新鮮事物時,不要忘了那些我們每天使用的大量開源庫。在這里,向大家介紹的就是,在這個任勞任怨的大家庭中,最受開發者喜愛的五個Android庫。希望通過對它們的了解,能夠對你的開發工作有所幫助。


1. GSON

Gson是Google提供的用來在Java對象和JSON數據之間進行映射的Java類庫。可用于將Java對象轉換成對應的JSON表示,也可以將JSON字符串轉換成一個等效的Java對象。如果與API打交道的話,那么這將會是你經常需要的東西。我們主要使用JSON的原因就是,相較XML,輕量級的JSON要簡單的多。

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

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

就如它網站上的介紹“Retrofit將你的REST API變為Java接口”一樣,Retrofit把REST API返回的數據轉化為Java對象方便操作,對于在項目中組織API調用,是一個不錯的解決方案。其請求方法和相對URL都帶有注解,使得代碼變得更加簡潔。使用注解,你可以很容易的添加一個請求主體,操縱URL或頭文件,并添加查詢參數。除此之外,每個函數可以定義為同步或異步,具有返回值的函數為同步執行,而異步函數沒有返回值且最后一個參數為Callback對象。

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()
            .setServer(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) {

    }
});
Retrofit默認情況下使用的是GSON,所以無需自定義解析,同時還支持其他轉換器。

3. EVENTBUS

EventBus是用于簡化應用中各個部件之間通信的一個庫。比如從一個Activity發送消息到一個正在運行的服務,亦或是片段之間簡單的互動。而下面使用的示例,就是如果網絡連接丟失,該如何通知一個活動:

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(對象關系映射),讓你無需編寫一個單獨的SQL語句,就可以保存和檢索SQLite數據庫記錄。每個數據庫記錄都被包裹整齊地歸為一類,如delete()和save()的方法。

擴展ActiveAndroid Model的對象能夠保存在數據庫里,如:

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是移除大量,用于和數據庫一同工作的樣板代碼的一個很好的方法。當然除此之外,還有其他開源解決方案,如GreenDAO和ORMLite。

5. UNIVERSAL IMAGE LOADER

UIL是是一個開源項目,其目的就是提供一個可重復使用的儀器為異步圖像加載、緩存和顯示。它的使用很簡單:

imageLoader.displayImage(imageUri, imageView);

盡管Picasso擁有更好的API,但其缺乏自定義。而使用UIL構建器幾乎可以配置所有(其中最重要的就是在抓取和緩存大型圖片時,Picasso會失敗)。

良好的開源庫會讓你的開發變得更簡單更快速,而普遍流行的庫通常測試良好且易用使用。在大多情況下,你可以很容易的將它們從Maven中導入到Android Studio項目里。將它們添加到相關性的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'
}

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品冒白浆免费视频 | 琪琪在线影院 | 欧美xxxx喷潮 | 欧美黑人xxxx猛牲大交 | 日本h在线精品免费观看 | 欧美一区二区在线免费观看 | 亚洲精品视频观看 | 亚洲高清二区 | 伊人网99| 成人看片又黄又爽 | www.操操操.com| 亚洲人成在线观看男人自拍 | 久久艹免费视频 | 免费一级毛片在级播放 | 久久精品久久精品 | 欧美高清正版在线 | free性欧美另类hd | 91精品久久久久久久久网影视 | 日本最新伦中文字幕 | 色人阁亚洲| 国产成人一区二区三中文 | 在线免费看网站 | 中文字幕在亚洲第一在线 | 9191免费视频观看高清 | 亚洲视频在线网 | 小说区图片区综合久久88 | 日韩不卡一区二区三区 | 真性中出| 免费性| 欧美日韩精品一区二区三区四区 | 秋霞一级特黄真人毛片 | 久久久高清日本道免费观看 | 中文字幕在线观看免费视频 | 波多野结衣中文一区 | 欧美性视频一区二区三区 | 日本护士做xxxwww | 毛片爱爱| 国产 | 久而欧洲野花视频欧洲1 | 国产高清国产精品国产k | 叼嘿视频在线免费观看 | 欧美高清xxxx性 |