繁体   English   中英

java.lang.IndexOutOfBoundsException:索引:6,大小:6

[英]java.lang.IndexOutOfBoundsException: Index: 6, Size: 6

我进入下一个状态时出错 我真的需要你的帮助 我被困了几天

package com.developer.fireone.finga;

import android.content.Intent;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.developer.fireone.finga.Model.Story;
import com.developer.fireone.finga.Model.User;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;

import jp.shts.android.storiesprogressview.StoriesProgressView;

public class StoryActivity extends AppCompatActivity  implements StoriesProgressView.StoriesListener{


    int counter = 0;
    long pressTime=0L;
    long limit = 500L;

    StoriesProgressView storiesProgressView;
    ImageView image, story_photo;
    TextView story_username, description;


    LinearLayout r_seen;
    TextView seen_number;
    ImageView story_delete;


    List<String> images;
    List<String> descriptions;
    List<String> storyids;
    String userid;

    ProgressBar progressBar;

    private View.OnTouchListener onTouchListener  = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()){
                case MotionEvent.ACTION_DOWN:
                    pressTime=System.currentTimeMillis();
                    storiesProgressView.pause();
                    return false;

                case MotionEvent.ACTION_UP:
                    long now=System.currentTimeMillis();
                    storiesProgressView.resume();
                    return limit < now-pressTime;
            }

            return false;
        }

    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_story);

        r_seen=findViewById(R.id.r_seen);
        seen_number=findViewById(R.id.seen_number);
        story_delete=findViewById(R.id.story_delete);

        storiesProgressView=findViewById(R.id.stories);
        image=findViewById(R.id.image);
        story_photo=findViewById(R.id.story_photo);
        story_username=findViewById(R.id.story_username);
        description=findViewById(R.id.description_story);

        r_seen.setVisibility(View.GONE);
        story_delete.setVisibility(View.GONE);


        progressBar=findViewById(R.id.progress_circular);


        userid=getIntent().getStringExtra("userid");

        if(userid.equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){

            r_seen.setVisibility(View.VISIBLE);
            story_delete.setVisibility(View.VISIBLE);

        }

        getstories(userid);
        userInfos(userid);


        View reverse = findViewById(R.id.reverse);

        reverse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                storiesProgressView.reverse();
            }
        });
        reverse.setOnTouchListener(onTouchListener);

        View skip = findViewById(R.id.skip);

        skip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                storiesProgressView.skip();
            }
        });
        skip.setOnTouchListener(onTouchListener);

        r_seen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(StoryActivity.this, FollowersActivity.class);
                intent.putExtra("id", userid);
                intent.putExtra("storyid", storyids.get(counter));
                intent.putExtra("title", "views");
                startActivity(intent);

            }
        });


        story_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Story")
                        .child(userid).child(storyids.get(counter));
                reference.keepSynced(true);

                reference.removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        if(task.isSuccessful()){
                            Toast.makeText(StoryActivity.this, R.string.strdeleteToast, Toast.LENGTH_SHORT).show();
                            finish();
                        }

                    }
                });

            }
        });

    }

    @Override
    public void onNext() {

        Glide.with(getApplicationContext()).load(images.get(++counter)).into(image);
        description.setText(descriptions.get(++counter)); //exception here
        addview(storyids.get(counter));
        seenNumber(storyids.get(counter));

    }

    @Override
    public void onPrev() {
        if((counter-1) < 0) return;
        Glide.with(getApplicationContext()).load(images.get(--counter)).into(image);
        description.setText(descriptions.get(--counter));
        seenNumber(storyids.get(counter));

    }

    @Override
    public void onComplete()
    {
        finish();
    }

    @Override
    protected void onDestroy() {
        storiesProgressView.destroy();
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        storiesProgressView.pause();
        super.onPause();
    }

    @Override
    protected void onResume() {
        storiesProgressView.resume();
        super.onResume();
    }

    private void getstories(String userid){

        images = new ArrayList<>();
        descriptions = new ArrayList<>();
        storyids = new ArrayList<>();

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Story")
                .child(userid);
        reference.keepSynced(true);

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                images.clear();
                descriptions.clear();
                storyids.clear();
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                    Story story = snapshot.getValue(Story.class);
                    long timecurrent = System.currentTimeMillis();

                    if(timecurrent>story.getTimestart() && timecurrent<story.getTimeend()){

                        images.add(story.getImageurl());
                        storyids.add(story.getStoryid());
                        descriptions.add(story.getDescription());

                    }


                }

                storiesProgressView.setStoriesCount(images.size());
                storiesProgressView.setStoriesCount(descriptions.size());
                storiesProgressView.setStoryDuration(5000L);
                storiesProgressView.setStoriesListener(StoryActivity.this);
                storiesProgressView.startStories(counter); // a revoir avec 'counter'

                Glide.with(getApplicationContext()).load(images.get(counter))
                        .into(image);
                description.setText(descriptions.get(counter));


                addview(storyids.get(counter));
                seenNumber(storyids.get(counter));

                //progressBar.setVisibility(View.GONE);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }


    private void userInfos(String userid){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users")
                .child(userid);
        reference.keepSynced(true);

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                final User user = dataSnapshot.getValue(User.class);
                Glide.with(getApplicationContext()).load(user.getImageurl()).into(story_photo);

                story_username.setText(user.getUsername());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }


    private void addview(String storyid){
        FirebaseDatabase.getInstance().getReference().child("Story").child(userid)
                .child(storyid).child("views").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(true);
    }

    private void seenNumber(String storyid){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Story")
                .child(userid).child(storyid).child("views");
        reference.keepSynced(true);

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                seen_number.setText(""+dataSnapshot.getChildrenCount());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }


}

我希望故事与分配给每个故事的描述一起出现,但我有这个错误

java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 at java.util.ArrayList.get(ArrayList.java:411) at com.developer.fireone.finga.StoryActivity.onNext(StoryActivity.java:176) at jp.shts.android.storiesprogressview.StoriesProgressView$1.onFinishProgress(StoriesProgressView.java:190) at jp.shts.android.storiesprogressview.PausableProgressBar$1.onAnimationEnd(PausableProgressBar.java:117) at android.view.animation.Animation$3.run(Animation.java:381) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

image_firebase_db

每个 ++counter 都会增加 counter 变量,并且您希望每次单击仅更改一次计数器(与 onPrev() 相同):

public void onNext() {

        int index = counter++;
        Glide.with(getApplicationContext()).load(images.get(index)).into(image);
        description.setText(descriptions.get(index));
        addview(storyids.get(counter));
        seenNumber(storyids.get(counter));

    }

++counter更改为counter++

++counter将递增然后传递值counter++传递值然后递增。

所以当你到达最后一个元素时,你正在递增(达到数组的大小)然后传递值,因此IndexOutOfBoundException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM