일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 린개발론
- 언덕오르기탐색
- 테스팅원리
- 결함테스팅
- 정보처리기사
- 검증테스팅
- 소프트웨어테스트
- 소프트웨어공학
- 모바일앱프로그래밍
- 균일비용탐색
- 정의
- 프로그래밍언어패러다임
- 공부하는직장인
- 컴퓨터과학과
- 프로그래밍
- kiss원칙
- 정처기
- 수제비
- A* 알고리즘
- 정보처리산업기사
- 한국방송통신대학교
- 컴퓨터과학개론
- 린소프트웨어개발론
- 시험공부
- 비전공자
- 결함테스팅검증테스팅차이
- 방통대
- 개발자
- 프로그래밍패러다임
- 정처기준비
- Today
- Total
우와테크
androidStudio 안드로이드 E/AndroidRuntime: FATAL EXCEPTION: main 오류 + ProgressBar , ProgressDialog 만들기 본문
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(); //바깥터치 금지
...
}
모를땐 어렵지만 하고나면 완전 간단!!!
끝!
(뿌!뜻!)
그렇지만.... 오류는 계속되는데..
이것은 동기통신/비동기통신 때문이었다.