본문 바로가기

Android/Dev32

DevLog:::개발중인 테스트기기에서만 Log를 확인할 수 있게 하기 코드를 짜는 개발중에는 좀 더 상세한 파악을 위해서 작동하는 코드의 중간중간마다 아래와 같이 Log를 붙여놓아야 문제가 발생할경우 헤메는 경우를 줄일 수 있습니다. Boolean result = false; public void somethingWork_A() { Log.d("로그 somethingWork_A",String.valueOf(result)); result = true; startSomething_A() } public void startSomething_A() { result = false; Log.d("로그 startSomething_A",String.valueOf(result)); } 보통 개발중에는 코드의 여기저기에 위와 같이 로그를 붙여놓고 사용하고 개발이 끝난 후에는 부분에는 로그가.. 2021. 8. 31.
AndroidStudio 4294967201 오류 ::: AMD CPU를 사용하는 시스템에서 AVD 사용을 위해 android emulator 설치할 때 1. 문제 AMD CPU를 사용하는 시스템도 안드로이드 스튜디오의 AVD를 사용하여 앱일 테스트 할 수 있습니다. 몇년 전에 어떻게 사용할 수 있는지 아래와 같은 글을 올린적이 있습니다. featherwing.tistory.com/16 라이젠 PC 에서 Android Studio AVD 사용하기 인텔 기반 시스템을 사용하다가 라이젠 기반의 개발 머신으로 변경후에 당황했던 것이 빌드후 테스트를 할 때 AVD를 사용하려 하니 Emulator : emulator : ERROR : x86 emulation currently requires hardware acc.. featherwing.tistory.com 저도 라이젠 기반의 워크스테이션을 가지고 있고, 이를 이용하여 개발하고 있는데요. 며칠전에 AVD를 사용.. 2021. 4. 1.
A failure occurred while executing com.android.build.gradle.--- 빌드 or APK 생성시 해당 오류가 발생할 때 1. 문제 안드로이드 앱을 Build 하거나 APK를 생성할 때 아래의 오류등이 발생하며 빌드가 되지 않는 경우가 있습니다. A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable 발생하는 상황을 비교해 보면 테스트 디바이스나 AVD에서 테스트할때는 발생하지 않다가, Build나 APK 파일을 생성할때 발생하는것을 확인했습니다. com.android.build.gradle 이후는 여러가지로 변경되어 나타납니다. 2. 원인 발생원인은 프로젝트에서 빌드시 캐싱된 파일등이 꼬여서 발생합니다. 3. 해결방법 따라서 이때의 해결방안은 간단합니다. 안드로이드 프로.. 2020. 12. 9.
webview의 loadData 사용 시 화면에 아무것도 나타나지 않을때 위와 같이 Open Source Licence 화면을 만들때 webview와 webview.loadData를 사용하곤 합니다. 보통 String 리소스에 해당 부분의 내용을 작성해 둔 후 아래와 같이 사용하면 화면의 webview에 간단하게 내용을 보여줄 수 있습니다. public void initWebview() { setContentView(R.layout.activity_setting_web); WebView webview = findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setVerticalScrollBarEnabled(true); String HTML= getString(R.string.O.. 2020. 7. 20.
CheckBox, switch 등을 ReadOnly처럼 사용하기 CheckBox나 Switch등은 클릭 이벤트가 발생하면 체크가 되거나 스위치가 온오프되는 편리한 기능을 가지고 있습니다. 보통은 아래와 같이 사용합니다. mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mCheckBox.setChecked(isChecked); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { //TODO check true } else { //TODO check false } } }); 별다른 처리를 하지 않더라도 편리하게 사용할 수 있는 이 기능은, .. 2020. 6. 2.
기기의 지역(Locale) 판별 및 리소스 사용하기, 국가코드와 언어코드 1. 개별적인 리소스 사용하기 2. 기기의 지역(Locale) 판별하기 3. 국가코드(contry)와 언어코드(Language) 1. 개별적인 리소스 사용하기 앱을 개발할 때, 사용자의 지역에 따라 다른 언어를 사용해야 하는 경우가 있습니다. 언어의 경우 보통 다음과 같이 개별적인 resource를 만들어 주면 됩니다. 해당 언어를 사용하는 기기에서 해당 resource를 사용하게 되며, 기기의 설정에서 언어변경시에도 자동으로 변경되게 됩니다. 만드는 방법은 아래와 같습니다. 개발중인 안드로이드 앱의 폴더 내의 app/src/main/res 폴더 내에 values를 언어별로 분리해서 추가 해 주면 됩니다. 뒤에 언어가 붙지 않은 폴더가 기본 폴더가 되며, 언어에 따라 해당 언어 코드가 붙은 폴더내의 리소.. 2020. 5. 28.
NestedScrollView - ScrollView 와 RecyclerView 사용시의 오류 해결 한 뷰에 여러개의 RecyclerView를 사용하는 경우, 아래와 같이 ScrollView 안에 Recyclerview를 넣게 됩니다 이때 일부 RecyclerView에서, 아이템들이 다 표시되지 못하고 데이터보다 더 적게 표시되는 현상이 계속 발생했었습니다. 로그를 달아보니, list의 아이템들이 정확하고 list.size()도 정확한데, size보다 더 적은 아이템들이 계속 표시되는 현상이었습니다. 별다른 해결책을 찾지 못하고 잊어버리고 있었는데, 최근 여러개의 RecyclerView를 다시 써야 할 일이 생겨서 보니 또 다시 이런 현상이 발생하였습니다. 원인은... 정확하게는 알 수 없고, ScrollView와 RecyclerView간에 버그가 있는것 같습니다. 단, 해결책은 정확합니다. Scrol.. 2020. 4. 23.
Google Drive API 사용시 untitled 파일만 생성될 때 최근 Google Drive API 를 사용하여 앱의 데이터 백업 기능을 추가하고 있습니다. Google Drive를 앱에 적용하는 예제는 참 많은데, 2019년 말부터 기존의 Drive API는 Deprecate 되었기 때문에, 참 많은 예제들이 다 무쓸모가 되어 버려서 약간 헤메게 되었습니다. 현재는 Oauth 2.0을 이용한 API 인증 기능등이 추가되면서 Drive REST API를 사용하게 되고, Drive API v3 을 사용하게 됩니다. 개발자 문서를 참고하여 API 콘솔을 이용하여 OAouth2.0 인증관련 기능을 추가 하는 등의 작업을 Google 로그인 기능을 추가한 뒤, Drive API 관련 기능을 추가하는데 문제가 자꾸 생기는것이었습니다. 1. 파일 업로드가 안됨. 2. 업로드가 .. 2020. 4. 14.
람다식(Lamda Expressions)으로 onClickListener 만들기 버튼을 눌렀을때 어떤 작업을 실행할 수 있도록 만드는 방법은 여러가지 방법이 있습니다. 2가지 방법만 예를 들어 본다면 아래와 같습니다. 1. 아래와 같이 매 개체 마다onClickListener를 연결 Button mButton1, mButton2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mButton1 = findViewById(R.id.button1); mButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { something1(); } }); mB.. 2020. 4. 11.
toString과 String.valueOf 의 차이점 개발을 하다보면 String형은 굉장히 자주 사용하게 됩니다. Log를 달아서 오류가 발생하는 부분을 찾을 때 사용하기도 하구요. 보통 String을 사용할때는 아래의 toString으로 사용하곤 합니다. Int someNumber = 13; String someString = someNumber.toString(); 하지만 해당 코드의 경우에는 toString의 대상이 되는 값이 null 값이 되는경우 여지 없이 nullPointException을 띄우며 앱이 종료되는 현상을 확인할 수 있습니다. 그렇다면 어떻게 해야 할까요? 아래와 같이 try/catch 로 Exception 대응을 일일이 해주어야 한다면 굉장한 낭비가 아닐 수 없습니다. try { Int someNumber = null; Strin.. 2020. 4. 4.