Open euzl opened 4 years ago
민원접수 화면 구성
이미지 비율 맞추기 (ImageView, src) [안드로이드 레이아웃]ImageView 높이 이미지 비율에 맞게 설정하기
<ImageView
android:layout_width="wrap_content"
android:layout_height="24dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_ev_place" />
adjustViewBounds 속성을 추가하고, 따라갈 크기는 wrap_content로 해준다. 이미지는 background가 아닌 src로 해줘야 한다!!
edt 속성 (이메일타입, 멀티라인) 안드로이드 에디트텍스트 속성 5. [inputMethod, inputType] (Android EditText Attributes 5) 옛날자료이지만 유용하다. 아래와 같은 식으로 사용
<EditText
android:inputType="textEmailAddress"
android:singleLine="false" />
리사이클러뷰 RecyclerView(리사이클러뷰)의 원리와 사용법(feat. Kotlin)
리사이클러뷰
: 뷰를 재활용하는 것.
예) 10개씩 화면에 띄운다면 뷰를 13개정도만 만든다. 어댑터를 이용해서 각 뷰에 내용을 넣어준다. 이때, 뷰만 재활용하기 때문에 뷰 내부의 레이아웃은 바뀔 수도 있다.암튼 사용자 화면은 리사이클러뷰를 쓸 필요는 없어보인다. 스크롤뷰는 적용해야 될 듯. 관리자 화면에서 충전소 사용량, 민원 내역확인할 때 리사이클러 쓰면 되겠다!
Toast.makeText(this.getApplicationContext(), <넣을 string>, Toast.LENGTH_SHORT).show();
아 뭔가 멋져....
자정이 넘었으니 14일은 여기까지
<application
...
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="<native-app-key>"/>
</application>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
도로명주소 좌표변환
이라고 검색하니까 프로그램이 많이 뜬다! 활용하면 될 듯Room
이라는 DB를 SQLite 보다 권장하는 중. 서버에 연결할 수도 있고..? 근데 일단 로컬로 !!xls 파일
이 아닌, Open API
를 이용하기로 결정!공공데이터 API 연결하기
SERVICE KEY IS NOT REGISTERED ERROR
에러 발생
공공데이터포털 FAQ
그러하다.. (1) URL 디코딩작업필요 (2) 발급받고 1시간 이후 사용
일단 기다려보자 ~~
기다려도 안 된다. URL 디코딩을 해주자..
천상나타블로그 - URL인코더, 디코더
위 링크에서 변환함. (%
가 빠진 형태가 되면 성공)
뭔가 된다 !!! (약 2시간 있다가 URL 디코딩한 거 씀)
자바 코드 추가 (안스) [Android] 공공기관 데이터 포털 API 신청 + android xml 파싱 이 블로그 보고 함! (거의 복붙..) 일단 연결이 된 것에 의의를 둔다. 뿌듯
항목명=입력&항목명=입력
이런 방식인듯 예) addr=경기도&serviceKey="dfhsf"
비동기로 api에서 데이터 받아와서 리스트에 저장 asyncTask
이용...
여기 보고 응용함 안드로이드 스튜디오 : 공공데이터의 활용(2) - XmlPullParser를 이용한 XML 데이터 파싱 ArrayList에 파싱해서 저장은 성공!! 문제는 이 리스트를 어떻게 메인 액티비티에 전달하느냐..
AsyncTask 개념 [Android] 안드로이드 - AsyncTask 구현 예제 안드로이드 AsyncTask 사용하기.
public class MyAsyncTask extends AsyncTask<Integer, String, Long> 기본형태는 아래처럼 extends를 받고 generic 타입을 정해준다. 필수 override 함수는 doInBackground() 이고 나머지는 필요에 따라 선언 첫번째 : doInBackground에서 사용될 파라메터 (post에서 사용될 파라메터를 return) 두번째 : onProgressUpdate에 사용될 파라메터 세번째 : onPostExecute에 사용될 파라메터
(참고) 이런 방법이 있다. execute().get();
지금은 적용 안 되지만 나중에 활용하길
[안드로이드] AsyncTask결과값 얻어오기
리스트를 메인으로 넘길 방법을 고민하던 중 성규님께서 콜백을 사용하라고 조언해주셨다! 츄라이 고
인터페이스, 콜백 공부 안드로이드로 배우는 자바의 인터페이스 (콜백, 리스너, 옵저버) [AsyncTask] 비동기작업 - 쓰레드(Thread) → 1번 보고 listener구현 해보고 2번 보고 따라하면 콜백 끝 -!
Interface
: 클래스가 반드시 구현해야 할 행동을 정의한 추상클래스
구현 : 인터페이스에 정의된 모든 메서드를 구현해야 함!! implements
키워드 사용
// interface (추상클래스)
public interface Car {
public void move(int key); // 정의만!!
// 구현
public class Sportscar implements Car {
@Override
public int move(int key) {
key += 30;
return key;
}
public class Minicar implements Car {
@Override
public void move(int key) {
key += 3;
return key;
}
콜백 구현..! 은 했는데, 파싱에서 에러가 발생했다.
I/Choreographer: Skipped 45 frames! The application may be doing too much work on its main thread.
일단 10개만 받아오게 수정했는데, 리스트에 2개만 들어가 있음. 심지어 아무 정보도 들어있지 않다. 무슨일이지?
START_TAG → (TAG: item, 기타, 등등 ...) →END_TAG 무조건 이 구조 !! 따라서 잘 구성해 주지 않으면 매 순간 객체를 만들게 된다. 이전의 내 상황은 값 하나 들어갈 때마다 리스트에 추가된 듯?
제대로 들어갔다!! 감동적
함수로 뺀 다음 예외처리 해주었음
또 문제 발생.. 리스트에 첫번째 객체가 null 이라서 마커표시할 때 에러발생!
if (tag.equals("item")) {
csList.add(setChargingStation());
}
관리자 페이지 시작
최적지분석 지도에 표시하기
일단 데이터파일의 형태
0811.json 으로 바꿔서 로컬(assets) 이용해서 파싱할 것!
json이 안 불러와지는것 같아서 프로그램이용해서 개행분리를 했더니 json으로 받아오긴 함!
https://lktprogrammer.tistory.com/175 - 기본적인 가져오기
https://blog.naver.com/PostView.nhn?blogId=qbxlvnf11&logNo=221432824912&categoryNo=44&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView https://stackoverrun.com/ko/q/3081178 - 배열
에러
동찬이꺼 표시할 페이지...
jsonㅇㅣ 왜 안열리나했더니... textview를 만든적이 없었다.
아! "features"를 "Feature"라고해서 ㅋ.ㅋㅋ.ㅋㅋㅋㅋ ㅠ 허무해 맑은정신맑은코딩 필수
하나가 뭉텅이로 들어왔다. arr[0][0] = "3.234234, 3,4342"
요런식
아마 한번 더 분리를 해야겠지
ㅓㄹ 성공!!!!!
자바에서는 무조건
ArrayList<AnalyzePlace> analyzePlaces = new ArrayList<>();
이렇게 할당해놔야되구나..! 안그러면 null로인식 -> 기본 array가 아니라 ArrayLIst(자료구조)를 사용했기 때문!
데이터 싹 바뀌었고 받아왔음!
어우 피곤...
최적지분석 final point에 따라 마커 색상 다르게 표시.
string builder pattern string builder pattern
나인패치도 했다. (말풍선) 나인패치
충전기 타입/상태 정보
액티비티가 전환될 때 값을 넘기는 데 어려움이 있어서 intent 사용
textView.setText(editText.getText());
edt에서 값 가져오는 방법... 허무!
edittext 마지막 키보드 '완료' 동작하게 하는 법 + '다음' 설정
세얼드프리퍼런스에 객체 저장.. 생각해보니 하나만 되구나 디비가 역시 필요하긴 함ㅋㅋ
안드로이드 개발 SharedPreferences 객체와 배열 저장을 위한 gson 사용하는 방법
alertdialog가 자꾸 안떳는데... 알고보니 builder.show();
를 안해줬다;
안드로이드 개념 및 예제 - AlertDialog
sharedpreference에서 editor사용하면 꼮 commit()
해주기!
키보드로 화면 크기 재조정되게 manifest에 추가하면 끗!
<activity android:name=".admin.PredictActivity"
android:windowSoftInputMode="adjustResize" />
동찬코드삽입
compile 'com.squareup.okhttp3:okhttp:3.6.0'
이걸 해줘야된다
json 파일 파싱하려 노력함..
edittext이용
검색구현 string contains() 메서드
썼음
ㄷㅐ박... 안드로이드 라이프사이클의 중요성..!! onResume을 이용해야된다. 다시 시작할때는... 약간 init기능 됨 쩐당
switch {
case :
<내용1>
startActivity();
<내용2>
break;
위 코드에서 startActivity() 가 실행된다고 <내용2> 가 실행되지 않는게 아님. 무조건 <내용2> 까지는 실행되고 break되는 것..!! 그래서 파란색으로 바꾸는 코드를 <내용2>에 하면 액티비티가 변하기 전에 변했다. 따라서 onResume안에 파란색으로 바꾸는 코드했더니 시기좋게 딱딱!
develop → release/v1.0.0 → 태그 달아주고 → git push 를 master에 바로!
훌 끝났당!!
ripple 효과 커스텀!
DB연결
child()
계속 붙여서 사용하면 중첩으로 하부를 만들 수 있다.push()
를 사용해서 저장하면 타임스탬프값을 가지고 key를 자동으로 생성한다. 출력에서 child이벤트리스너는 여기에 사용하면 유용하게 데이터를 제어할 수 있다. → 목록 만들기에 유용리사이클러뷰로 petition list 넣을 레이아웃 만드는 중
context와 activity를 인자로 사용하는 것의 차이는 무엇일까? context와 fragment는?
activity를 새로 실행하고 새로운 액티비티에 의해 현 액티비티에 변화가 생겼을 때 → startActivityForResult
를 이용한다. (resume이랑 잘 엮어보거라)
그리고 이를 recyclerView에서도 활용가능..!
[안드로이드] recyclerView에서 Activity로 인텐트 값 넘기기
[안드로이드]Recyclerview(리사이클러뷰) 구현
리사이클러뷰 클릭리스너 구현 두 가지 방법
arrayList 에 넣는데 자꾸 NPE가 뜬다
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
이번엔 리사이클러뷰에 아무것도 안뜸.. 리스트엔 다 들어갔는데!
리사이클러뷰 하나를 두 군데에서 사용하니까 문제가 발생했다. 이슈#36
데이터 불러오기
그 내부 아이템을 가져올 때는
안된거
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Petition petition = dataSnapshot.getValue(Petition.class);
petitionList.add(petition);
}
된거
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
petitionList.add(data.getValue(Petition.class));
}
// LinearLayout 사용
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(petitionAdapter);
}
차이가 느껴 지시는지?
확인했으면 색 바뀌는거는 이제 리사이클러뷰 내에서 처리하도록!