1. 程式人生 > >MPAndroidChart 教程:Realm.io database integration (資料庫整合)

MPAndroidChart 教程:Realm.io database integration (資料庫整合)

由於V2.2.0 MPAndroidChart支援繪圖資料直接從未來Realm.io移動資料庫 。

這個簡短的教程將展示如何直接列印儲存在與MPAndroidChart realm.io移動資料庫的資料。 有關realm.io一般的文件,如何使用資料庫,如何讀取或寫入的物件,請訪問其官方文件 。

為了繪製與域的資料,你需要下面的依賴關係新增到您的專案:

MPAndroidChart搖籃依賴
Realm.io搖籃依賴 

實際的教程方案如下所示:

資料類

我們有一個數據類Score ,延伸RealmObject必需),其儲存的假想遊戲的Totalscore的以及一個scoreNr將代表一個簡單的增量計數器和一個playername。

public class Score extends RealmObject {

    private float totalScore;

    private int scoreNr;

    private String playerName;

    public Score() { } // no arguments constructor required for realm

    public Score(float totalScore, int scoreNr, String playerName) {
        this.scoreNr = scoreNr;
        this
.playerName = playerName; this.totalScore = totalScore; } // all getters and setters (required for realm) ... }

請確保您的資料類提供了一個無引數的建構函式(除了你可能有任何其他的建構函式),以及所有必需的getter和setter方法。 這是必需的領域工作。

領域例項和資料

為了能夠訪問儲存在領域資料庫中的資料,我們需要一個領域資料庫例項:

// get realm instance
Realm realm = Realm.getDefaultInstance();

有關如何設定你的領域例項(包含詳細資訊RealmConfiguration請看看這裡 。 在本教程中,我們假設我們的境界資料庫的資料是這樣的:

biao ge

該程式碼儲存前面提到的Score在本地領域資料庫例如可以是這樣的物件:

realm.beginTransaction();

Score score1 = new Score(100f, 0, "Peter");
realm.copyToRealm(score1);
Score score2 = new Score(110f, 1, "Lisa");
realm.copyToRealm(score2);
Score score3 = new Score(130f, 2, "Dennis");
realm.copyToRealm(score3);
Score score4 = new Score(70f, 3, "Luke");
realm.copyToRealm(score4);
Score score5 = new Score(80f, 4, "Sarah");
realm.copyToRealm(score5);

realm.commitTransaction();

繪圖領域資料

現在,我們需要做的是劇情在上述所有Totalscore的和playername值BarChart從境界直接的scoreNr將被用作xIndex。 為了做到這一切,我們需要我們realm-object以及一個RealmResults List我們的資料物件的Score 。

// get the data from realm (of course more complex queries are possible here)
RealmResults<Score> results = realm.allObjects(Score.class);

完成查詢後,我們需要設定我們的RealmBarDataSet 建構函式(建構函式中的一個),如下所示:

public RealmBarDataSet(RealmResults<T> results, String yValuesField, String xIndexField) { ...

作為引數results ,我們會為我們的results ,我們剛剛從境界查詢列表。 該String yValuesField將是的成員變數的名字Score級,應該代表繪製圖表中的y值。 在我們的例子中,我們要繪製的Totalscore的 ,所以我們會提供”totalScore”作為引數。 為xIndexField引數我們希望提供應該被用作xIndex成員變數的名稱。 在這種情況下,我們將提供”scoreNr”作為引數。 最終的DataSet應該是這樣的:

RealmBarDataSet<Score> dataSet = new RealmBarDataSet<Score>(results, "totalScore", "scoreNr");
// apply additional styling...

在建立後DataSet ,我們需要把它新增到RealmBarData物件。 該類RealmBarData還提供了看起來像這個領域相關資料的特定建構函式:

ublic RealmBarData(RealmResults<T> results, String xValuesField, List<IBarDataSet> dataSets) { ...

此外,作為引數results ,我們會為我們的results ,我們剛剛從境界查詢列表。 引數xValuesField應的成員變數的名稱Score類應作為x值(值作圖沿著x軸)。 在我們的例子中,我們希望玩家的名稱繪製每個分數以下,所以我們選擇”playerName”作為引數。 結果應該是這個樣子:

ArrayList<IBarDataSet> dataSetList = new ArrayList<IBarDataSet>();
dataSetList.add(dataSet); // add the dataset

// create a data object with the dataset list
RealmBarData data = new RealmBarData(results, "playerName", dataSetList);
// additional data styling...

最後但並非最不重要的,我們的加RealmBarData物件我們BarChart並重新整理:

// set data
barChart.setData(data);
barChart.invalidate(); // refresh

結果

繪製的結果應該看起來有點像這樣:

tu

當然,外觀的圖表和資料樣式取決於你的個人設定。 所有領域建立​​的圖表可以風格正好相同的方式與來自其它資料來源的資料饋送圖表。

與其他所有圖表型別灌封資料的方式非常相似。 一個異常被堆疊酒吧,這需要一個特殊的物件RealmList來表示float[]其中各個棧值儲存陣列。

連結

程式碼與此相關的維基條目:RealmWikiExample
所有領域相關的示例程式碼
Realm.io 網站
Realm.io Java文件
Realm.io 斯威夫特文件