java.lang.ArrayIndexOutOfBoundsException: length = 3;Индекс = -1 - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь извлечь Timestamp из этой базы данных Firebase и установить ее как метку оси X.Для точки данных она отображает значение x как индекс, а значение y равно 100 при каждом обнаружении дочернего элемента.

enter image description here

Приложения продолжают сбой и возвращаются: java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1 У меня 3 ребенка в моих узлах, но я не могу понять, почему мой индекс продолжает возвращаться -1 .

Эта база данных предназначена для 1 пользователя.Всякий раз, когда я щелкаю по другому клиенту, «идентификатор пользователя» ссылается на другой узел Firebase и извлекает Fallstate.Когда я получаю первые данные клиента, он работает просто отлично.Когда я нажимаю на второй и пытаюсь получить данные, это не сработает.Пожалуйста, скажите мне, что я сделал не так.

Вот мой код:

public class FallHistory extends AppCompatActivity{

String userid, fallstateValue, fallstateTimestamp;
FirebaseAuth auth;
FirebaseUser user;
DatabaseReference ref;
ArrayList<String> array9; //array untuk fallstate
ArrayList<String> array10; //array untuk fallstateTimeStamp
PointsGraphSeries<DataPoint> series ;
int x=0;
int i = 1;
String[] xLabels ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fall_history);
    auth = FirebaseAuth.getInstance();
    user = auth.getCurrentUser();
    final GraphView graph = (GraphView)findViewById(R.id.graphFall);
    series = new PointsGraphSeries<>();
    final StaticLabelsFormatter staticLabelsFormatter = new StaticLabelsFormatter(graph);
    graph.addSeries(series);
    Viewport vp = graph.getViewport();
    vp.setXAxisBoundsManual(true);
    vp.setMinX(0);
    vp.setMaxX(3); //yg ditunjukin max berapa
    vp.setYAxisBoundsManual(true);
    vp.setMinY(1);
    vp.setMaxY(200); //yg ditunjukin max berapa
    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

    array9 = new ArrayList<>(); //array untuk fallstate
    array10 = new ArrayList<>(); //array untuk fallstate timeStamp

    Intent intent = getIntent();
    if(intent!=null)
    {
        userid = intent.getStringExtra("userid");
    }

 ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userid);
    ref.child("fallstate").child("nilaifallstate").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            fallstateValue = dataSnapshot.child("fallstate").getValue(String.class);
            fallstateTimestamp = dataSnapshot.child("Timestamp").getValue(String.class);
            Log.i("fallstate value", "fallstate value " + fallstateValue);
            Log.i("fall timestamp", "fall timestamp " + fallstateTimestamp);
            array9.add(fallstateValue);
            array10.add(fallstateTimestamp);
            x = x + 1;
            DataPoint point = new DataPoint(x, 100);
            series.appendData(point, true, 1000);

            xLabels = new String[array10.size()];
            array10.toArray(xLabels);


            graph.getGridLabelRenderer().setHumanRounding(true);
            graph.getGridLabelRenderer().setHorizontalLabelsAngle(90);

            graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter()
            {
                @Override
                public String formatLabel(double value, boolean isValueX)
                {
                    if (isValueX)
                    {
                        return xLabels[(int) value];
                    }
                    return super.formatLabel(value,isValueX);
                }
            });

            Log.i("xlabels", "xlabels " + xLabels);

        }

Скажите, пожалуйста, что я сделал не так.

1 Ответ

0 голосов
/ 26 мая 2018

Эта ошибка:

java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1

Означает, что в вашем массиве 3 элемента, и вы пытаетесь получить элемент из неверного индекса.Эти три элемента размещаются в индексах 0, 1 и 2 в Java, индексы массива начинаются с 0!

Обратите внимание, что метод onChildAdded является асинхронным.При использовании следующей строки кода:

Log.i("xlabels", "xlabels " + xLabels);

Ваш массив всегда будет пустым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...