반응형

Android 28

안드로이드 view 동적 크기 변경. getLayoutParam() 안될때.

제목 그대로. 코드에서 동적으로 view 의 크기를 바꿔야 할 때가 있다. 이 때 가장 간단한 방법이 View.getLayoutParams().height = 123;View.getLayoutParams().width = 123; 일 거다. 그런데, 이게 안 먹는 때가 있다. 아마 객체의 동적 생성 순서 문제인 듯 한데. 어쨌던 뻑난다. 에러 코드는 아래와 같다. java.lang.NullPointerException: Attempt to write to field 'int android.view.ViewGroup$LayoutParams.height' on a null object reference 내용은 말 그대로, LayoutParams 를 통해 width height 를 변경하려고 했는데, 객체가 ..

앱이 background 상태일때, FCM Notification event handler 를 수신하지 못하는 경우.

말 그대로다. 이거때문에 무려 이틀을 삽질했는데, 그 결과를 적는다. 일단, FCM 은 GCM 다음 나온 android notification 이다. ( notification 을 한글로 뭐라 해야 하나? "알림" 해버리면 Alarm 이랑 헷갈린단 말야. ) 이거 쓰는 방법이야 인터넷 보면 많이 있다. 대표적인 건 http://blog.naver.com/PostView.nhn?blogId=cosmosjs&logNo=220739141098&parentCategoryNo=56&categoryNo=&viewDate=&isShowPopularPosts=true&from=search http://www.inflater.co.kr/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-f..

AsyncTask 는 중복해서 못 쓰나?

말 그대로다. 왜그런지 모르겠는데, 두 개의 activity 에서 각각 async Task 를 실행시키니 동시에 돌아가지 않았다.정확하게는 Acitvity * 2 가 아니라, Service 1 , Activity 1 에 각각 async Task 가 돌아가고 있는거지.이리저리 디비그 코드를 찍어 본 결과, AsyncTask 는 둘 중 하나만 돌아가는 걸 확인했다. 그런데 인터넷 뒤져보니, Async Task 는 원래 중복으로 돌아가는 거란다. 그것도 128개까지 동시 돌릴 수 있다네? 통박으로 찍어보면, 아마도 1. 원래 asynctask 두 개 다 쓸 수 있는게 맞는 건데 내가 코드를 잘 못 짰거나2. 하나의 Activity 에서는 중복해서 쓸 수 있지만, 여러 Activity 가 중복된 상태에서 각각 ..

AlertDialog 에서 token null is not for an application 에러.

말 그대로다. 아래와 같은 에러가 발생해서 삽질한 결과를 기록한다. java.lang.RuntimeException: Unable to start activity ComponentInfo android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application AlertDialog 를 사용하려고 했는데, 잘 되던 코드가 뻑나서 삽질을 해 보니 AlertDialog.Builder builder = new AlertDialog.Builder( getApplicationContext() ); // 오류발생 AlertDialog.Builder builder = new AlertDialog.Bui..

안드로이드 에러 : Service Intent must be explicit

안드로이드에서 service 를 이용하려고 코드를 짰는데, 제목과 같은 에러가 나왔다. 짐작으로 삽질...하다가 혹시나 해서 에러 메시지로 검색해보니, 답이 나오더라. 언제나처럼 StackOverFlow 다. 상태 : 안드로이드 서비스 실행을 위해, 아래와 같은 방식으로 실행.startService( new Intent("package.MyService") );오류 : java.lang.IllegalArgumentException: Service Intent must be explicit해결 : intent 부르는 방식을 변경.startService( new Intent("package.MyService") );->startService( new Intent( getApplicationContext(),..

OnTouch 이벤트가 안 먹을때는, MotionEvent.ACTION_POINTER_DOWN 대신 MotionEvent.ACTION_DOWN 을 써 보자.

말그대로다. 별 코드를 다 박아봐도 mouse down / mouse up 이 안 나와서 뭔가 했는데, 알고보니 예제 코드가 잘못된 거였다. 아래의 코드를 보자. public boolean onTouch(View v, MotionEvent event){switch ( event.getAction() ){case MotionEvent.ACTION_POINTER_DOWN :Log.v( "TEST", "_DOWN");break;case MotionEvent.ACTION_POINTER_UP :Log.v( "TEST", "_UP" );break;case MotionEvent.ACTION_MOVE :Log.v( "TEST", "_MOVE" ); break;}return true;} 인터넷에서 뒤져낸 코드인데, 아무..

안드로이드에서 RadioButton 의 on/off 가 제대로 움직이지 않고 오류가 발생할때

안드로이드에서 RadioButton 을 코드로 켜고 꺼 주려면 어찌해야 할까?예를들어 RadioButton radio1 = ( RadioButton )findViewById( R.id.radiobtn1 ); 이라면, 아마 맨 처음 생각하는 코드는 이런 거겠지. int rid = { R.id.radiobtn1, R.id.radiobtn2, R.id.radiobtn3 } ;for( int one : rid ){ radio1 = (RadioButton)findViewById( one ); radio1.setChecked( false );}radio1.setChecked( true ); 이건 이렇다. [ 저 코드를 작성한 시점에서 인터넷 안 뒤져보고 바로 디버깅 들어갔다면, 제대로 낚인거임. 나처럼 ] 결론부터..

안드로이드에서, 두 줄 박스 만들기

말 그대로다. 원래는 group box 를 만들려고 했는데, android 의 drawable 의 shape 혹은 layer-list 에서는 text view 를 얹을 수가 없다.그러므로, group box 는 결국 layout 쪽에서 잡아줘야 되고, 여기서는 두 선 테두리 만드는 것만 이야기한다. 원래 이런 거는, 선 스타일이 따로 있어서 border-style : double 뭐 이런 걸로 해결되어야 하는데, 왜인지는 모르겠지만 안드로이드는 이중선 스타일은 없다. ( 점선은 있더라 )자세한건 http://overoid.tistory.com/30 http://developer.android.com/guide/topics/resources/drawable-resource.html 여길 참고하고.... 결..

android gridview에서, 한 칸의 높이가 전체화면을 차지할때.

왜그런지는 모르겠는데, 나는 이런 현상이 일어났다. 보통 그리드뷰 gridview 를 쓰면, 예를 들어 한 줄 3칸 설정해서 사진같은거 표시하면 이렇게 나와야 정상인데 이렇게 나오더라고. 분명히 화면은 사진을 더 보여줄 수 있는 여유가 되는데, gridview 의 한 줄( row ) 이 화면 영역을 전부 잡아먹어서 안 되는 것. 근데 이상한건, 다른 자료 찾아보니 나같은 증상이 없었나 보다. 나만 겪은 증상인듯.결론부터 말하면, 해결책은 GridView 의 화면을 구성하는 Adapter의 layout.xml 에서,각 View 들의 height 값을 "wrap_content" 나 "fill_parent" 로 하지 말고,명시적으로 크기를 지정하라는 거다. 예를 들면 뭐 이런식. 근데, 왜 이렇게 명시적으로 ..

안드로이드에서 SQLite 를 사용할 때, SQLiteOpenHelper 의 onCreate()는, 앱 설치할 때 최초 한번만 실행된다.

[ 새로운 짤방이다. 신선하다. ] 한두시간 정도 별별 로그를 다 찍고 삽질을 하다가, 인터넷 찾아보고 알게 된 거다.그러니까... 보통 안드로이드에서 객체가 생성될때는, Constructor 나 onCreate() 를 거치잖아.그런데 SqLiteOpenHelper() 는 onCreate() 에 아무리 로그를 박아 넣어 봐도, 안 거치는 거다.이게 웃긴게... 혹시나 해서 생성자( Constructor ) 에 박아 넣은 로그는 잘 나오는데, onCreate() 에 넣은거만 안 나왔다. 맨첨엔 내가 무슨 코드를 잘 못 짠 줄 알고 엄청 고민했는데, 뭔가 이상해서 검토해 보니, onCreate() 가 실행되는 조건은 1. getWritableDatabase() 혹은 getWritableDatabase() 가..

반응형