상황 안드로이드에서 네트워크를 통해 외부로 접속하려는 상황에서 Permission Denied 오류가 발생하였고 매니패스트에 필요한 권한을 등록한 후에 NetworkOnMainThreadException 에러가 발생하였습니다. java.lang.RuntimeException: Unable to start activity ComponentInfo: android.os.NetworkOnMainThreadException 원인 네트워크를 이용하여 데이터를 주고받기 위해서 별도의 Thread 가 필요합니다. 이 때 별도의 Thread 로 구현이 되어있지 않아서 아래사진과 같은 오류가 발생하게 됩니다. 별도의 Thread 로 돌리는 이유는 메인은 유지시켜두기 위해서로 생각됩니다. Too Much Info 실제로 ..
안드로이드
socket failed: EACCES 오류원인 안드로이드에서 네트워크(IP) 기능을 통해 데이터를 송수신하려고 하는 상황에서 외부로 통신이 가능한 권한이 없는 경우 아래와 같은 오류가 발생합니다. W/System.err: java.sql.SQLException: Network error IOException: socket failed: EACCES (Permission denied) socket failed: EACCESS 해결방안 AndroidManifest.xml 에 필요한 권한을 추가해 주어야 합니다. AndroidManifest.xml 에 uses-permission 추가 애플리케이션에서 네트워크관련 작업을 실행하기 위해 매니페스트에 권한을 추가합니다. 필요한 권한은 INTERNET 과 ACCE..
프래그먼트란 액티비티 내에 배치되어 사용자 인터페이스를 구성하는 안드로이드 구성요소 중 하나입니다. 이 개념이 나온 이유는 안드로이드가 여러 디바이스 (예 : 태블릿) 을 지원하면서 다양한 기기의 화면에 대응할 필요가 있어졌기 때문입니다. 액티비티 내의 일부 영역을 차지하여 사용하 화면을 구성할 수 있으며, 액티비티 내에서 독립적으로 동작할 수 있어서, 한 번 만들어 두면 다른 액티비티에서도 사용할 수 있습니다. 아래 공식 안드로이드 개발 URL 에서 프래그먼트를 자세하게 다루고 있습니다. https://developer.android.com/guide/components/fragments?hl=ko 프래그먼트 | Android 개발자 | Android Developers A Fragment repres..
match_parent 와 wrap_content 속성 레이아웃 위젯의 layout_width 와 layout_height 속성에 match_parent 와 wrap_content 를 설정할 수 있습니다. 이 설정은 다음과 같은 의미를 가집니다. 속성 설명 match_parent 부모의 길이에 맞춥니다. 위젯의 경우 위젯을 감싸고 있는 레이아웃의 width 와 height 에 맞춰집니다. 보통 match_parent 는 "너비 혹은 높이가 화면 전체 길이"를 의미합니다. warp_content 위젯에 입력할 글자 혹은 이미지 크기에 맞게 설정됩니다. 아래 XML 예제로 보기 쉽게 설명해 보겠습니다. match_parent 와 wrap_content 예제 예제1 FrameLayout 에서 layout_wi..
레이아웃 레이아웃은 배치라는 의미를 가지고 있어 '배치 관리자' 라고 부르기도 합니다. 레이아웃은 다양한 위젯들을 배치할 수 있으며, 레이아웃 종류에 따라 배치하는 방법이 다릅니다. 레이아웃 종류 레이아웃 종류는 다음과 같습니다. FrameLayout 프레임 레이아웃은 위젯을 배치하는 레이아웃 중에서 가장 단순합니다. 이러한 이유는 특별한 옵션을 지정하지 않는 경우 모든 위젯을 좌측상단을 기준으로 쌓기 때문입니다. 그래서 가장 먼저 배치한 위젯의 크기가 작다면 보이지 않을 수도 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Colored by Color Scripter cs LinearLayout 리니어 레이아웃은 위젯들을 선형으로 배치하는 레이아웃 입니다. 리니어 레이아웃을..
인텐트 어플리케이션은 한 개이상의 액티비티가 필요하며, 액티비티들이 서로 데이터를 주고받을 수 있어야 합니다. 액티비티는 하나의 화면을 의미합니다. 인텐트는 다른 액티비티를 실행하거나 그 액티비티로 데이터를 전달할 수 있는 안드로이드 구성 요소 중 하나입니다. 아래 URL 에서는 intent 에 대한 개념과 사용법을 다루고 있습니다. https://developer.android.com/reference/android/content/Intent Intent | Android 개발자 | Android Developers developer.android.com 인텐트 사용방법 인텐트를 선언하는 방법 인텐트를 선언하는 방법입니다. 1 2 3 import android.content.Intent; Intent ..
액티비티 앱을 실행했을 때 보여지는 화면을 구성할 수 있도록 해주는 구성요소 중 하나입니다. 앱은 한 개의 액티비티만을 가질수도 있고 수십 개 이상을 가질수도 있습니다. 일반적으로 액티비티는 화면 전체를 가득 채우지만, 다른 액티비티 위에 띄울수도 있습니다. 또한 액티비티에서 다른 액티비티를 실행할 수도 있으며, 뒤로가기 버튼으로 이전 액티비티로 돌아갈 수도 있습니다. 액티비티 메소드 액티비티는 기본적으로 다양한 상태를 가질 수 있으며, 상태에 따라 액티비티의 특정 메소드가 호출됩니다. 액티비티의 사앹에 따라 호출되는 메소드를 액티비티의 '생명주기 메소드'라고 부릅니다. 이러한 액티비티는 안드로이드 Activity 클래스를 상속한 클래스를 말합니다. Activity 클래스는 안드로이드가 발전하면서 하휘 ..
로그 로그는 프로그램의 현재 상태나 비정상적인 동작을 추적할 수 있는 기능입니다. 로그를 적재적소에 잘 남기면 향후 발생하는 문제를 빠르게 해결할 수 있습니다. 안드로이드 로그 안드로이드에서는 android.util.Log 클래스를 사용해서 로그를 남길 수 있습니다. 로그 레벨을 Verbose 에서 Error 까지 있으며, 레벨을 구분하여 로그를 제대로 남기면 향후 좋습니다. 각각의 로그레벨별로 안드로이드 스튜디오의 Logcat 에 색상 표시가 되며, 태그로 오류유형을 구분한 후 검색어를 통해 원하는 로그만을 추적할 수도 있습니다. 로그 레벨 설명 Error 가장 심각한 문제가 발생했을 때 남기는 로그 Log.e("Tag", "Message") Warning 심각하지는 않지만 나중에라도 문제의 소지가 있..
안드로이드 동작방법 안드로이드 앱의 기본적인 동작 방식은 사용자가 버튼을 클릭하거나 스크롤하는 등 사용자의 행동을 감지해서 적절한 반응을 하는 것 입니다. 즉 레이아웃 XML 에 배치한 위젯을 사용자가 어떻게 사용하는지에 따라 반응하는 코드를 작성해야 합니다. 레이아웃 XML 하나의 레이아웃에는 텍스트뷰, 버튼 등의 여러 위젯을 선언할 수 있으며 이 위젯들은 ID 로 구분이 됩니다. 하나의 레이아웃 내의 ID 들은 고유해야 하며, 서로다른 레이아웃은 같은 ID 를 가질 수 있습니다. ID 설정하는 방법 이러한 ID 는 XML 에서 android:id 값 혹은 Desine 의 우측 Attributes 의 id 로 설정해 주면 됩니다. 자바에서 레이아웃 XML 의 ID 를 사용하는 방법 setContView..
안드로이드 가상기기 안드로이드 스튜디오에서는 안드로이드 가상기기를 설치하여 앱이 동작하도록 해줍니다. 이를 애뮬레이터라고 칭하며, 에뮬레이터를 생성해서 프로젝트를 실행할 수 있습니다. 다양한 안드로이드 가상기기를 제공해 주며, 이에 맞는 API 버전과 해상도에서 앱이 잘 동작하는지 확인할 수 있습니다. 안드로이드 가상기기 생성방법 1. 노란색 박스표기된 AVD Manager 를 클릭합니다. AVD Manager 를 통해서 가상기기를 생성할 수 있습니다. 2. Create Virtual Device 버튼을 클릭합니다. 3. 가상기기를 선택합니다. 저는 'Nexus 5X' 를 선택했고 각자 필요한 디바이스를 선택해주면 됩니다. 4. 기기를 선택했으면 안드로이드 버전을 다운로드합니다. 저는 Oreo 의 8.1..