所以我在使用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文件,但无法使其正常工作。
如果有人知道解决方案,请告诉我!
答案 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);
它生成动态图。尝试并测试