Я пытаюсь отправить некоторые данные из действия в его фрагмент.Я связал данные, но когда я пытаюсь получить их во фрагменте, они появляются пустыми.
Graph.java (фрагмент)
private void setData() {
ArrayList<Entry> values = new ArrayList<>();
values.add(new Entry(0, (float) 4.8));
Log.e("set", "method reached");
LineDataSet set1;
if (mChart.getData() != null &&
mChart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) mChart.getData().getDataSetByIndex(0);
set1.setValues(values);
mChart.getData().notifyDataChanged();
mChart.notifyDataSetChanged();
} else {
set1 = new LineDataSet(values, "Blood Glucose Levels");
set1.setDrawIcons(false);
set1.setLineWidth(4f);
set1.setCircleRadius(5f);
set1.setDrawCircleHole(false);
set1.setValueTextSize(10f);
set1.setFormLineWidth(1f);
set1.setFormSize(15.f);
set1.setColor(Color.BLACK);
set1.setCircleColor(Color.BLACK);
}
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
mChart.setData(data);
mChart.notifyDataSetChanged();
mChart.invalidate();
******
if (getArguments() != null) {
Log.e("if", "if reached");
float myDataSet = Float.parseFloat(getArguments().getString("INPUT"));
Log.e("data", "data retrieved");
float count = 0;
float mcount = count + 1;
values.add(new Entry(1, 4));
values.add(new Entry(mcount, myDataSet));
}
******
mChart.notifyDataSetChanged();
mChart.invalidate();
}
@Override
public void onResume(){
super.onResume();
Log.e("resume", "onResume reached");
setData();
}
}
Tabbed.java (базовый класс Java)фрагмента)
//getting inputs from room and putting them into the view in table
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mInputViewModel = ViewModelProviders.of(this).get(InputViewModel.class);
//only add if there is a new input
Log.e("result1","onActivityResult tabbed reacher");
if (requestCode == INPUT_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
//retrieve input from room database
Input1 input1 = new Input1(data.getStringExtra(input.EXTRA_REPLY));
//insert the inputs into the view model of the recyclerView
mInputViewModel.insert(input1);
//convert the String input1 to a double
Double d = Double.parseDouble(input1.getValue());
*****
//send d value to graph.java
Bundle bundle = new Bundle();
Log.e("Testing", "Bundle made");
bundle.putString("INPUT", String.valueOf(d));
Graph myObj = new Graph();
myObj.setArguments(bundle);
*****
}
//display pop-up if no input is added don't save the input
} else {
Toast.makeText(
getApplicationContext(),
R.string.empty_not_saved,
Toast.LENGTH_LONG).show();
}
}
Я пометил пакет и получил код с ****.Из моей записи в журнале я знаю, что код пакета работает и метод setdata () работает, но оператор 'if' никогда этого не делает.Я добавил код if (getArguments() != null) {
, чтобы избежать исключения java.lang.nullPointerException.
Я думаю, что данные объединяются корректно, но по какой-то причине они становятся нулевыми во фрагменте.Возможно, некоторые из них написаны неправильно - это моя первая попытка использования комплектов.
РЕДАКТИРОВАТЬ: у меня настроен класс модели liveata и View, но я не уверен, как их реализовать для обновления данных.
InputViewModel.java
private InputRepository mRepository;
private LiveData<List<Input1>> mAllInput1s;
public InputViewModel (Application application) {
super(application);
mRepository = new InputRepository(application);
mAllInput1s = mRepository.getAllInput1s();
}
LiveData<List<Input1>> getAllInput1s() {return mAllInput1s;}
void insert(Input1 input1) {mRepository.insert(input1);}
}