Android java.lang.ArrayIndexOutOfBoundsException:rowIndex>;可用行数:3>;3.
我在使用Android java.lang.ArrayIndexOutOfBoundsException:rowIndex>;可用行数:3>;3.,android,realm,mpandroidchart,Android,Realm,Mpandroidchart,我在使用MpAndroidChart和Realm生成图形时遇到了一个问题,它抛出了一个异常。我想知道在XAxis上测量的日期和在YAxis上测量的体脂百分比。我已经查看了Android设备监视器,数据被正常保存在id 1下正确的字符串日期和浮动fatPercent和id 2下…等等。更多信息如下。这是我的密码: public class DataFatPercent extends RealmObject { private float id; private String
MpAndroidChart
和Realm
生成图形时遇到了一个问题,它抛出了一个异常。我想知道在XAxis
上测量的日期和在YAxis
上测量的体脂百分比。我已经查看了Android设备监视器,数据被正常保存在id 1下正确的字符串日期和浮动fatPercent
和id 2下…等等。更多信息如下。这是我的密码:
public class DataFatPercent extends RealmObject {
private float id;
private String date;
private float fatPercent;
public DataFatPercent() {
}
public DataFatPercent(float id, String date, float fatPercent) {
this.id = id;
this.date = date;
this.fatPercent = fatPercent;
}
用二传手和接球手
我的活动:
public class FatGraphProgressActivity extends AppCompatActivity {
ImageView dodaj_podatke_grafu;
private LineChart lineChart;
Realm realm;
RealmResults<DataFatPercent> results;
protected Typeface mTf;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fat_graph_progress);
realm = Realm.getDefaultInstance();
lineChart = (LineChart) findViewById(R.id.lineChart);
setup(lineChart);
lineChart.setExtraBottomOffset(5f);
lineChart.getAxisLeft().setDrawGridLines(false);
lineChart.getXAxis().setDrawGridLines(false);
lineChart.getXAxis().setLabelCount(5);
lineChart.getXAxis().setGranularity(1f);
dodaj_podatke_grafu = (ImageView) findViewById(R.id.dodajpodatkevgraf);
dodaj_podatke_grafu.setOnClickListener(new View.OnClickListener() {
//Calling dialog,where I put data and save in realmbase
@Override
public void onClick(View v) {
AddFatProcentDialog afpd = new AddFatProcentDialog();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
afpd.show(transaction,"dialog");
}
});
}
@Override
protected void onResume(){
super.onResume();
setData();
}
public void setData(){
results = realm.where(DataFatPercent.class).findAll();
AxisValueFormatter formatter = new AxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return results.get((int) value).getDate();
}
@Override
public int getDecimalDigits() {
return 0;
}
};
lineChart.getXAxis().setValueFormatter(formatter);
RealmLineDataSet<DataFatPercent> lineDataSet = new RealmLineDataSet<>(results,"id","fatPercent");
lineDataSet.setDrawCubic(false);
lineDataSet.setLabel("Result Scores");
lineDataSet.setDrawCircleHole(false);
lineDataSet.setColor(ColorTemplate.rgb("#FF5722"));
lineDataSet.setCircleColor(ColorTemplate.rgb("#FF5722"));
lineDataSet.setLineWidth(1.8f);
lineDataSet.setCircleSize(3.6f);
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(lineDataSet);
LineData lineData = new LineData(dataSets);
styleData(lineData);
// set data
lineChart.setData(lineData);
lineChart.animateY(1400, Easing.EasingOption.EaseInOutQuart);
}
简而言之,它在方法getFormattedValue中抛出此错误:
原因:java.lang.ArrayIndexOutOfBoundsException:rowIndex>
可用行数:3>3
在io.realm.internal.TableView.nativeGetSourceRowIndex(本机方法)中
位于io.realm.internal.TableView.getSourceRowIndex(TableView.java:128)
在io.realm.RealmResults.get(RealmResults.java:205)中
com.example.draganmaric.tablayoutswipescroll.FatGraphProgressActivity$2.getFormattedValue(FatGraphProgressActivity.java:89)
我还注意到,如果我在setData
方法中更改
results = realm.where(DataFatPercent.class).findAll();
使用
findallAsync
,它不会抛出异常(它会打开活动),但我在屏幕上看不到任何图形。感谢您提供的任何建议使用findAllAsync和callback,在回调函数hi Luca,tanx的图形上显示数据以进行响应。我完全忘了。好的,我知道如何将这个部分放到change(Object元素)上,并将其设置为results.addChangeListener(changeListener);但我不知道在publicvoidonchange函数中放什么(如何使用结果)。有什么建议吗?只是快速看了一下,因为我不能花太多时间在atm上,我想你需要调用“ArrayList dataSets=new ArrayList();dataSets.add(lineDataSet);LineData LineData=new LineData(dataSets);styleData(LineData);//set data lineChart.setData(LineData);lineChart.animateY(1400,轻松。轻松选择。轻松输出夸脱);”回调中的这些部分method@DMdeveloping真的很抱歉回复太晚。您仍然能够重现此问题吗?如果您不介意,如果您可以将您的项目共享给我们,我们可以帮助调试它help@realm.ioWith在realm团队的帮助下,特别感谢Beender,如果有人遇到同样的问题,我已经找到了解决方案RealmResults的索引以0开头,但它传递给getFormattedValue的第一个数字是1,这将在它使用结果的最后一个元素调用时导致崩溃。它的工作方式是:return results.get((int)value-1.getDate();之后,只需更改回findAll();然后工作。再次感谢领域团队!)使用findAllAsync和callback,在回调函数hi Luca和tanx的图形上显示响应数据。我完全忘了。好的,我知道如何将这个部分放到change(Object元素)上,并将其设置为results.addChangeListener(changeListener);但我不知道在publicvoidonchange函数中放什么(如何使用结果)。有什么建议吗?只是快速看了一下,因为我不能花太多时间在atm上,我想你需要调用“ArrayList dataSets=new ArrayList();dataSets.add(lineDataSet);LineData LineData=new LineData(dataSets);styleData(LineData);//set data lineChart.setData(LineData);lineChart.animateY(1400,轻松。轻松选择。轻松输出夸脱);”回调中的这些部分method@DMdeveloping真的很抱歉回复太晚。您仍然能够重现此问题吗?如果您不介意,如果您可以将您的项目共享给我们,我们可以帮助调试它help@realm.ioWith在realm团队的帮助下,特别感谢Beender,如果有人遇到同样的问题,我已经找到了解决方案RealmResults的索引以0开头,但它传递给getFormattedValue的第一个数字是1,这将在它使用结果的最后一个元素调用时导致崩溃。它的工作方式是:return results.get((int)value-1.getDate();之后,只需更改回findAll();然后工作。再次感谢领域团队!)
results = realm.where(DataFatPercent.class).findAll();