JSONObject json = thread.getStatus();
                    //json 파싱해서 ui에 삽입
                    if(json != null){
                        tempNow.setText(json.optDouble("currentTemp", -1.0));
                        humidNow.setText(json.optDouble("currentHum", -1.0));
                    }

(내 코드 일부)

 

플랫폼: android studio

 


오류 현상: 

다른 스레드로부터 json 오브젝트를 받아와서 ui를 갱신하는 코드를 작성 중에, 뜬금없이 setText() 메소드의 인자에 오류가 났다. 살펴보니 int로 casting을 하라고 한다. 편집기가 내 의도와 다르게 인식한 거 같다.

 

오류 화면


사유:

setText() 메소드는 인자로 resId 값(int 형), char 배열, CharSequence 인터페이스 등을 받을 수 있다.

 

한편 resId 값이 아니라 직접 int 값을 출력해야하는 경우가 있고, 나처럼 double 형을 출력해야하는 경우가 있을 것이다.

 

내 경우 double 형의 데이터를 문자열 캐스트 없이 입력했고(...) double은 숫자 자료형이라 편집기에서 int로 캐스트 하는 것이 내 의도에 맞다고 판단한 것 같다.

 


해결책:

int, double 등 숫자 자료형인 경우 모두 적용된다.

 

1. String.valueOf() 메소드 사용

string 데이터로 바뀐다. 아주 잘 됨.

 

2. 빈 문자열과 concatenate해서 인자로 넣는다.

setText("" + 1.0) 등의 형식으로 작성하면 오류가 나지 않는다. 단순 데이터 외에 출력할 내용이 더 있다면 유용하게 쓸 수 있는 방법.



그외 시도 방법: .

에러 화면

 

 

플랫폼: 안드로이드 스튜디오(Android Studio)


오류 현상: InflateException-UnsupportedOperationException type 3으로 인한 어플리케이션 강제 종료

 

android.view.InflateException: Binary XML file line #16: Binary XML file line#16: Error Inflating class TextView

Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class TextView

Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 2 to dimention: type=0x3



사유: android:textSize 값을 dimen 타입으로 주지 않고 string type으로 줘서 생긴 오류. 이외에도 dimention 타입으로 줘야하는 값을 다른 타입으로 주면 xml 분석이 안 돼서 view inflate가 안 됩니다.

 

왜 이런 코딩을 했느냐 한다면, 앱 전체의 폰트 사이즈를 변경하는 방법을 찾아보다가 string.xml에 넣어서 할 수는 없을까? 라는 헛된 생각을 했고... listview를 inflate 하기 전까지는 오류가 있는 줄도 모르다가 그렇게 되었습니다.

 

type 3이라는 거 보니 다른 문제 타입도 있는 듯함.

 

해결책: xml에 dimen 값(dp 등)을 줍시다.

 

 

 

 

그외 시도 방법:

근로장려금으로 조립 데스크탑을 맞췄습니다.

새 컴퓨터를 샀으니 새로운 마음으로 편집기를 줄줄이 깔아 과제며 개인 프로젝트며 옮기기 시작했는데, 현재 안드로이드 개발만 데스크탑으로 못 옮긴 상태입니다.

 

avd가 아예 먹통이라서인데요. 제 노트북이 과열로 죽기 전에 정신을 차려야 할 텐데 큰일이네요.

 

시도했던 방법들을 기록해둡니다.


플랫폼: 안드로이드 스튜디오(Android Studio)

기타 오류

 

현상

avd 작동 안 됨. 오류 메시지 없음.

avd 디바이스는 보이지만 검은 화면으로, 부팅이 되지 않고 물리 버튼에 해당하는 우측 버튼(기기 회전, avd terminate 등)만 작동.

 

오른쪽 바의 버튼들만 작동

사유: 안드로이드 버전 문제 같습니다. 정확한 사유는 알 수 없는데, 아마 안드로이드 10과 다른 요소들이 충돌한 것으로 보입니다. 대체로 새로운 버전들은 조금 불안정한 면이 있으므로 상황에 따라 적절한 OS를 사용합시다.

 

해결책: 가상기기의 안드로이드 버전을 안드로이드 10에서 안드로이드 9로 내렸습니다. 너무 잘 되네요.

 

 

 

 

그외 시도한 방법들(실패함)

  • 가상기기 삭제 후 새 기종 설치
  • 안드로이드 스튜디오 삭제 후 재설치
  • cold boot
    가상기기가 무응답일 때 시도해볼 수 있으나 보통 작동은 되지만 무응답인 경우에 사용
  • wipe data
    무한 로딩일 때 Waiting for all target devices to come online 메시지에 대한 해결책1
  • invalidate cache/restart
    무한 로딩일 때 Waiting for all target devices to come online 메시지에 대한 해결책2
  • haxm 설치
  • 그래픽카드 드라이버 재설치
    드라이버가 없거나 너무 오래된 경우 avd가 동작하지 않는 케이스가 존재한다는 말이 있어 시도.

 

 

+ Recent posts