마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드스튜디오, 이미지업로드 이후 또 에러가 생깁니다

0 추천

아래에도 글을 하나 작성했는데

처음에 게시판에 이미지를 업로드하는 버튼을 누르고 아무 반응이 없어서

한번 더 누르니 이번에는 해당 액티비티가 종료되면서 아래와 같은 로그캣을 뱉어냅니다...

 

FATAL EXCEPTION: main

Process: com.example.sunity, PID: 8311

 

java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

 

at java.util.ArrayList.get(ArrayList.java:437)

 

at com.example.sunity.BulletinBoard.NewWriteActivity.storageUpload(NewWriteActivity.java:229)

 

at com.example.sunity.BulletinBoard.NewWriteActivity.lambda$new$0$com-example-sunity-BulletinBoard-NewWriteActivity(NewWriteActivity.java:147)

at com.example.sunity.BulletinBoard.NewWriteActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)

at android.view.View.performClick(View.java:7441)

at android.view.View.performClickInternal(View.java:7418)

at android.view.View.access$3700(View.java:835)

at android.view.View$PerformClick.run(View.java:28676)

at android.os.Handler.handleCallback(Handler.java:938)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loopOnce(Looper.java:201)

at android.os.Looper.loop(Looper.java:288)

at android.app.ActivityThread.main(ActivityThread.java:7839)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

 

아래는 해당 로그에 나온 NewWriteActivity.java 코드입니다.

else if (!isStorageUrl(pathList.get(pathCount)))//229번째 라인
{
                        String path = pathList.get(pathCount);
                        successCount++;
                        contentsList.add(path);

                        if(isImageFile(path)){
                            formatList.add("image");
                        } else if (isVideoFile(path)){
                            formatList.add("video");
                        } else {
                            formatList.add("text");
                        }

                        String[] pathArray = path.split("\\.");
                        final StorageReference mountainImagesRef = storageRef.child("posts/" +documentReference.getId() + "/"+pathCount+"."+pathArray[pathArray.length -1]);
                        try {
                            InputStream stream = new FileInputStream(new File(pathList.get(pathCount)));
                            StorageMetadata metadata = new StorageMetadata.Builder().setCustomMetadata("index",""+(contentsList.size()-1)).build();
                            UploadTask uploadTask = mountainImagesRef.putStream(stream, metadata);
                            uploadTask.addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception exception) {
                                    // Handle unsuccessful uploads
                                }
                            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                    final int index = Integer.parseInt(taskSnapshot.getMetadata().getCustomMetadata("index"));
                                    mountainImagesRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                        @Override
                                        public void onSuccess(Uri uri) {
                                            contentsList.set(index, uri.toString());
                                            successCount--;
                                            if (successCount == 0){
                                                //완료
                                                Writeinfo writeinfo = new Writeinfo(title, contentsList, formatList, user.getUid(), date);
                                                storeUpload(documentReference, writeinfo);
                                            }
                                        }
                                    });
                                }
                            });
                        } catch (FileNotFoundException e){
                        }

                        pathCount++;
                    }
// 
View.OnClickListener onClickListener = (v) -> {
        switch (v.getId()){
            case R.id.btn_upload:
                storageUpload();//147번째 라인
                break;
            case R.id.btn_image:
                startActivity(GalleryActivity.class, GALLERY_IMAGE, 0);
                break;
            case R.id.btn_video:
                startActivity(GalleryActivity.class, GALLERY_VIDEO, 0);
                break;
            case R.id.ButtonBackgroundLayout:
                if(ButtonBackgroundLayout.getVisibility() == View.VISIBLE){
                    ButtonBackgroundLayout.setVisibility(View.GONE);
                }
                break;
            case R.id. imageModify:
                startActivity(GalleryActivity.class, GALLERY_IMAGE, 1);
                ButtonBackgroundLayout.setVisibility(View.GONE);
                break;
            case R.id.videoModify:
                startActivity(GalleryActivity.class, GALLERY_VIDEO, 1);
                ButtonBackgroundLayout.setVisibility(View.GONE);
                break;
            case R.id.Modifydelete:
                final View selectedView = (View)selectedImageView.getParent();
                String path = pathList.get(parent.indexOfChild(selectedView) -1);
                if(isStorageUrl(path)){
                    StorageReference desertRef = storageRef.child("posts/"+writeinfo.getId()+"/"+storageUrlToName(path));
                    desertRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            showToast(NewWriteActivity.this,"파일 삭제 성공");
                            pathList.remove(parent.indexOfChild(selectedView) - 1);
                            parent.removeView(selectedView);
                            ButtonBackgroundLayout.setVisibility(View.GONE);
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            showToast(NewWriteActivity.this,"파일 삭제 실패");
                        }
                    });
                } else {
                    pathList.remove(parent.indexOfChild(selectedView) - 1);
                    parent.removeView(selectedView);
                    ButtonBackgroundLayout.setVisibility(View.GONE);
                }
                break;
        }
    };
// 

 

gkdisahs (200 포인트) 님이 2022년 11월 28일 질문

1개의 답변

0 추천

IndexOutOfBoundsException: Index: 1, Size: 1

리스트는 1개인데 2번째 목록을 부르려고 하니 오류가 나오는거네요...

pathCount 다시 한번 확인해보세요

비뢰광 (7,400 포인트) 님이 2022년 11월 29일 답변
...