우와테크

androidStudio 안드로이드 E/AndroidRuntime: FATAL EXCEPTION: main 오류 + ProgressBar , ProgressDialog 만들기 본문

java-androidStudio

androidStudio 안드로이드 E/AndroidRuntime: FATAL EXCEPTION: main 오류 + ProgressBar , ProgressDialog 만들기

uwaTech 2022. 8. 17. 15:51

사진 리스트를 조회하는 중인 안생아(안드로이드 + 신생아 수준의 개발자)에게는 흔한 현상도 신기하다.

마법이었다.

디버깅 모드로 해서 잘돌아가던 기능이 런해서는 돌아가지 않는다.

그러면서 뜨는 오류 

 

 

 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: "패키지명", PID: 13176
    java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
        at java.util.ArrayList.add(ArrayList.java:483)
        at "패키지명".Fragment.(사진)Fragment$4.onResponse((사진)Fragment.java:439)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:7860)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)

 

 

참나... 뭔말인가 싶다..

그러면서 떠오르는게 있다. 

사진 첨부 기능을 하면서 알게 된 사실인데 Activity로 만 이루어진 프로젝트의 경우 사진 첨부기능을 구현했을 때 큰 파일을 첨부하면 돌아가다가 앱이 강제종료되었다. 하지만 디버깅으로 단계를 밞아나가면 첨부되는 그 줄에서 돌아가는 상황을 지켜보는 걸 1분쯤 지나면 정상 실행 되었다.

그와 비슷하지 않을까..

드디어 progress bar를 적용할 때가 된 것이다.

 

 

progressbar 만드는 순서

1. xml로 progressbar를 작성한다. (UI)

2. progressbar.xml를 이용한 class를 작성한다. (Java)

3. 필요한 부분에 class를 넣는다.

dialog_progress.xml 
<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:progressTint="@color/customGreen"
    android:alpha="0.5">
</ProgressBar>
CustomProgressDialog.java
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;

import android.view.Window;
//작동대기 다이얼 로그
public class CustomProgressDialog extends Dialog {

    public CustomProgressDialog(Context context)
    {
        super(context);
        // 다이얼 로그 제목을 안보이게...
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_progress);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public void show(){
        super.show();
        this.setCancelable(false); //바깥터치 금지
    }
}

 

(사진) Fragment.java에 적용하기
private void doMethod(....) {

    //progressDialog 화면 띄우기
    CustomProgressDialog progressDialog = new CustomProgressDialog(getContext());
    //로딩창을 투명하게
    progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    progressDialog.show(); //바깥터치 금지


...



}

 

모를땐 어렵지만 하고나면 완전 간단!!!

 

끝!

(뿌!뜻!)

그렇지만.... 오류는 계속되는데..

이것은 동기통신/비동기통신 때문이었다.