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 斯威夫特文档 

你可能感兴趣的:(android,database,教程,图表库,MPChart)