Поэтому, когда я генерирую график внутри onCreate, я получаю именно тот график, который мне нужен Правильный график Но когда я пытаюсь сгенерировать график после нажатия кнопки, я получаю этот Неверный график Я пытаюсь сгенерировать график данных, которые выбирает пользователь, поэтому мне нужно сделать это в onClick, иначе имя, которое будет использоваться для фильтрации базы данных, должно быть жестко закодировано в onCreate («s» в одномкомментариев onCreate. Ниже приведен код моего OnCreate.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
//inicializando banco de dados
db = new MySQLiteHelper(this);
graph = (GraphView) findViewById(R.id.graph);
nomeEscolhido = (EditText) findViewById(R.id.editTextNome);
// if I uncomment these two lines I get the correct graph
//results = db.findRegisterByName("s");
//generateGraph(results);
}
Это событие вызывается при нажатии кнопки: (Если эти две строки в OnCreate выше прокомментированы и кнопкащелкнув, я получаю неправильный график)
public void playerToGraph(View view){
//results = db.getAllRegisters();
results = db.findRegisterByName(nomeEscolhido.getText().toString());
generateGraph(results);
}
Теперь я также опубликую функцию, которую я использую для создания графика. Проводя исследование, я обнаружил здесь GraphView не обновляет , что мне может понадобитьсяобработчик и выполняемый поток, поэтому я добавил их в generateGraph, но это не имело значения, я получаю те же результаты, что и раньше.
public void generateGraph(final List<Register> results){
graph.removeAllSeries();
final int size = results.size();
final List <Date> dates = new LinkedList<Date>();
Log.d("graphtag","size: "+Integer.toString(size));
Calendar calendar = Calendar.getInstance();
for(int i = 0 ; i<size;i++){
Date dd = new Date();
dd=convertToDate(results.get(i).getDate());
//calendar.setTime(convertToDate(results.get(i).getDate()));
//dd = calendar.getTime();
dates.add(dd);
Log.d("graphtag","data convertida: "+ dates.toString());
}
graphHandler.post(
graphRunnable = new Runnable()
{
public void run()
{
LineGraphSeries<DataPoint> series = new LineGraphSeries<>();
for(int i =0;i<size;i++) {
DataPoint DP = new DataPoint(dates.get(i), results.get(i).getTime());
//Log.d("graphtag",DP.toString());
series.appendData(DP, true, size);
}
Log.d("graphtag",Integer.toString(size));
graph.getViewport().setScrollable(true); // enables horizontal scrolling
graph.getViewport().setScrollableY(true); // enables vertical scrolling
// graph.getViewport().setScalable(true); // enables horizontal zooming and scrolling
//graph.getViewport().setScalableY(true); // enables vertical zooming and scrolling
series.setDrawDataPoints(true);
graph.addSeries(series);
graph.getGridLabelRenderer().setLabelFormatter(new DateAsXAxisLabelFormatter(getActivity()));
graph.getGridLabelRenderer().setTextSize(30);
//graph.getGridLabelRenderer().setNumHorizontalLabels(size);
graph.getViewport().setMinX(dates.get(0).getTime());
graph.getViewport().setMaxX(dates.get(size-1).getTime());
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setMinY(results.get(0).getTime());
graph.getViewport().setMaxY(results.get(size-1).getTime());
graph.getGridLabelRenderer().setNumVerticalLabels(size);
graph.getViewport().setYAxisBoundsManual(true);
//graph.getViewport().setMinX(Double.parseDouble(results.get(0).getDate()));
//graph.getViewport().setMaxX(Double.parseDouble(results.get(3).getDate()));
graph.getGridLabelRenderer().setHumanRounding(false);
}
}
);
}
Я также где-то читал, что мне, возможно, придется сбросить данные ( GraphView и resetData ), поэтому я использовал graph.resetseries (), но это не имело значения.Там также говорится, что это может сработать, чтобы полностью удалить представление GraphView и создать новое, но я не уверен, как я мог бы это сделать.
Любая помощь и идеи будут высоко оценены!