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();