在GraphView中显示已保存的字符串值

时间:2016-03-03 13:36:18

标签: java android xml graph

所以我在使用SharedPreferences保存的各种TextView上保存了一个数据。用户可以编辑该数据,它就像一个魅力..但现在我想要将单个项目的所有用户值保存在图表上,比如进度跟踪。

例如,如果1月1日的用户体重为220磅,而在2月1日的第一个体重为210磅,我希望用户输入的数据都显示在图表中,这样他们就可以跟踪进度。每次用户输入新数据时,我都需要在图表上显示新点。

我遇到了一个错误,试图将图表的DataPoint设置为已保存的用户输入,但这不起作用..

无论如何,这是代码:

XML:

<com.jjoe64.graphview.GraphView
    android:layout_width="match_parent"
    android:layout_height="200dip"
    android:id="@+id/graph" />

爪哇:

public class StatistikaGrafoviMain extends AppCompatActivity {
    TextView tezinaMetricRezultat;
    public static final String PREFS_NAME = "MyPreferencesFile";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_statistika_grafovi_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

        tezinaMetricRezultat = (TextView) findViewById(R.id.textViewStatistikeRezultatTezina);
        tezinaMetricRezultat.setText(settings.getString("tezinaMetricSave", "..."));

        GraphView graph = (GraphView) findViewById(R.id.graph);
        LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] {
                new DataPoint(1, 1),
                new DataPoint(1, 5),
                new DataPoint(2, 3),
                new DataPoint(3, 2),
                new DataPoint(4, 6)
        });
        graph.addSeries(series);


    }

}

正如您所看到的,我尝试访问SharedPreference文件,但无法使其正常工作。

如果有人知道解决方案,请告诉我!

3 个答案:

答案 0 :(得分:0)

我不知道你想要实现什么以及你的问题是什么,但我可以推荐使用内容提供商并将数据行存储在手机的mysql中。

这样您就可以存储大量数据,例如: 用户:myUser 日期:今天 重量:150磅 ...

它并不太复杂,有很多关于如何使用像这样的内容提供商的教程:contentProvider - youtube

答案 1 :(得分:0)

如果你坚持使用共享prefs(这种任务有问题), 您可以为每个用户创建共享首选项数组,例如:

    Set<String> set = new HashSet<String>();
    set.add("150");
    set.add("200");

    settings.edit().putStringSet("userId", set);


    Set<String> prefSet = settings.getStringSet("userId", null);
    String[] vals = prefSet.toArray(new String[prefSet.size()]);

    LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>();

    for (int i=0;i<vals.length;i++){
        series.add(new DataPoint(vals[i], i));
    }

另一种方法是将json对象保存为字符串:

   {"user": "MonkeyFish","values:[val1,val2,val-n]} 

然后您可以将其解析为Json对象以获取值。

答案 2 :(得分:0)

您必须像这样为数据点生成一个值数组

private DataPoint[] generateData() {
    DataPoint[] values = new DataPoint[count];
    for (int i=0; i<count; i++) {
        double x = a[i];
        int y = b[i];
        DataPoint v = new DataPoint(x, y);
        values[i] = v;
    }
    return values;
}

您可以将数据库中的值插入x和y数组中。

然后像这样在您的函数中调用它

LineGraphSeries series1 = new LineGraphSeries<DataPoint>(generateData());
graph.addSeries(series1);

它生成动态图。尝试并测试