디스코드 봇(Discord Bot) 개발 관련

 

현재 배틀그라운드 클랜에서 Discord API를 사용하여 클랜 자체봇 개발중입니다.

Library는 Javacord를 사용하였고, 봇 기능을 추가시키면서 미약하지만 개발 관련하여 정보를 공유하고자 합니다.

구글링해봐도 Discord API중 Javacord 관련한 포스팅은 마이너한지 찾아보기 힘들더라고요.

그래서 직접 작성해보겠습니다.

다음 [Discord-API] 카테고리의 포스팅에서는 Javacord Library 사용하여 프로젝트 생성하는법에 대해 작성해보도록 하죠.

블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,

데이터 프리퍼런스(Data Preference)

 


이번 포스팅에서는 프리퍼런스(Preference)에 대해 다루겠습니다.

일단 프리퍼런스란 무엇인가?


안드로이드 프로젝트를 진행하면서, ID나, String 문자열 등을 저장해야할 경우가 생깁니다. Ex) 로그인 페이지

보통의 경우 DB를 사용하여 Data를 저장할 수 있지만, DB를 쓰기에 너무 간단한 내용이거나, 애매한 상황일 경우가 생길수 있습니다.

그럴 경우, 안드로이드에서 제공하는 SharedPreferences를 사용합니다.

SharedPreferences를 사용하는 순서는 아래와 같습니다.

 정의하기(SharedPreferences) → 불러오기(getSharedPreferences)

→ 기록하기(editor)


[1] Preference 정의

[2] Preference 불러오기

[3] Preference 기록하기



먼저 Preference를 정의 및 그다음 기록할 파일을 불러오는 방법입니다.



 이때 앞에 있는 Pref은 기록할 xml의 이름입니다.

이름이 Pref.xml인 파일이 생성됩니다.


뒤에 있는 0은 무엇을 뜻하는지 설명을 하자면,

0 : 읽기, 쓰기 가능

MODE_WORLD_READABLE : 읽기 공유

MODE_WORLD_WRITEABLE : 쓰기 공유





 마지막으로 설정값을 가져오는 방법입니다

자료의 타입마다 다른 명령으로 가져와야 합니다

.getBoolean(key, defValue);

.getFloat(key, defValue);

.getInt(key, defValue);

.getLong(key, defValue);

.getString(key, defValue);


(만약 Int로 저장해두고 Boolean으로 가져오면 강제종료 에러가 뜨게 됩니다)


저기서 key라는 것은 저장될 값의 이름이고,

defValues는 만약 저장된 값이 없을 경우 반환하게 되는 값입니다



그런대 설정값을 가져오는것만으로는 실제 사용이 불가능 합니다

값을 저장도 해야죠?

그래서 저장, 즉 기록을 위해 또 하나 editor라는 것을 정의해야 합니다






 SharedPreferences.Editor ed = sp.edit();;

이번에는 Editor라는것이 붙었습니다


이렇게 editor로 사용할때는 이미 정의한 SharedPreferences에 ".edit()"를 붙혀

이 Preference의 에디터 역할을 할것이다 라고 해주시면 됩니다



사용방법은 아래와 같습니다

editor.putBoolean(arg0, arg1);

editor.putFloat(key, value);

editor.putInt(key, value);

editor.putLong(key, value);

editor.putString(key, value);

로딩과 마찬가지로 Boolean, Float, Int, Long, String이라는 형을 기록할 수 있습니다.






 마지막으로 값의 변동을 저장하기 위해서는 꼭!!! 아래와 같은 명령어가 필요합니다.

editor.commit();

또는 editor.apply();

무조건 이 명령어가 처리되어야 실제로 xml에 값이 기록되게 됩니다



https://youtu.be/spNrr9EwWj0

위 링크는 오늘 만들 어플리케이션의 구동 영상입니다.


미리 결과를 확인해보고 코딩을 해봅시다.

블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,


어플리케이션 제작_Count Up

 


오늘은 어플리케이션을 제작하려고 합니다.

버튼 터치시 숫자를 카운팅하는 어플리케이션입니다.


먼저 최종 화면부터 보여드리겠습니다.




화면 중앙의 “버튼”버튼을 클릭하면 텍스트뷰의 숫자가 1씩 커집니다. 최종적으로 텍스트뷰의 숫자가 100이 되면 “100!”이라는 토스트가 띄워집니다.


이번 강좌에서 버튼 터치 이벤트를 구현하는 방법에 대해 이해할 수 있을것 같습니다.



XML 뷰 설명합니다.


먼저 파란색으로 표시된 텍스트뷰의 숫자는 뷰 중앙에 위치한 버튼을 클릭했을때 1씩 커지도록 만들것입니다.


초록색으로 표시된 [종료] 버튼은 클릭했을때 어플을 종료시킵니다.

[초기화] 버튼은 텍스트뷰의 숫자를 0으로 초기화합니다.


이제 코딩을 합시다.



implements View.OnClickListener 부분은 안드로이드 스튜디오에서 작성 했으므로 이클립스와 문법이 조금 다릅니다.


이클립스를 사용할때는 위 사진대로 작성해주면 됩니다.  

ps. 자동완성기능을 생활화 합시다. [Ctrl + Space]


OnClickListener를 implement 했을 시에 class명에 빨간색 오류가 나타나는 경우가 있습니다.

그 경우에는 해당하는 클래스명에 마우스를 가져가면 Add Unimplemented methods 라는 항목을 클릭해 주면 오류가 없어집니다.


이제 텍스트뷰, 버튼을 선언해 줍시다.

아래 코드들을 MainActivity아래에 붙여 넣어줍시다.

int count;

Button btn;

TextView tv;

Button btnexit;

Button btnreset;





아래 코드들을 onCreate안에 붙여 넣어줍시다.

this.tv = (TextView)findViewById(R.id.textView); // 텍스트뷰


this.btn = (Button)findViewById(R.id.button); //클릭 버튼

this.btn.setOnClickListener(this);

this.btnexit = (Button)findViewById(R.id.btnexit); // 종료버튼

this.btnexit.setOnClickListener(this);


this.btnreset = (Button)findViewById(R.id.btnreset); // 초기화버튼

this.btnreset.setOnClickListener(this);


this.count = 0; // count 변수

주의할점은 위 코드보면 노란색 부분은 자신이 뷰에서 만든 버튼, 텍스트뷰들의 ID값과 같아야 됩니다!



일단 우리가 사용할 방법은 OnClickListener를 implements 하여 Onclick 메소드를 구현 하는 방법입니다.

이 방법은 리스너를 많이 사용해야하는 상황에서 많이 쓰입니다.


OnClickListener를 다른 방법으로 사용하는 방법은 아래 링크에서 확인하실 수 있습니다.


링크 : https://goo.gl/vSK5K8




OnClickListener를 implements 하면 onClick 메소드가 생성됩니다.



코드 설명 들어갑니다.


public void onClick(View v)

switch (v.getId()){

}

onClick 메소드의 파라메터 View v는 Onclick 이벤트가 발생한 뷰를 참조합니다.

Onclick 이벤트가 발생한 뷰의 ID를 알아내면 어떤 버튼을 클릭한지 알 수 있겠죠?

이를 토대로 버튼을 구별하는 조건문을 onClick 내에 작성해 주시면 되겠습니다. 모든 뷰들의 부모 클래스 View는 getId라는 메소드를 제공합니다. 이를 호출하여 뷰의 ID를 파악할 수 있습니다. 버튼의 ID가 button이라면, 아래와 같이 코드를 작성할 수 있습니다.


public void onClick(View v)

{

   // 어떤 버튼이 클릭되었는지를 버튼의 ID로 구별합니다.

   if (v.getId() == R.id.button)

   {

       // 버튼 클릭 후 처리될 작업이 여기에서 실행됩니다.

       // ...

   }

}


이때, 노란색으로 표시한 button은 XML에서 선언한 뷰의 ID값입니다.


이제 onClick 메소드 안에 코드들을 붙여넣어줍시다.

switch (v.getId()){

   case R.id.button :

       this.count++;  // count값 1증가

       if(this.count <= 100) { //count값이 100보다 작거나 같을때

           this.tv.setText(String.valueOf(this.count)); // 텍스트뷰의 텍스트를 count값으로 지정

       }

       if(this.count == 100){ //count값이 100일때

           Toast toast = Toast.makeText(MainActivity.this,"100!",Toast.LENGTH_SHORT);

           toast.show(); //토스트 출력

       }

   break;

   case R.id.btnexit :

       moveTaskToBack(true);

       finish();

       break;

   case R.id.btnreset :

       this.count=0; //count 값을 0으로 초기화

       this.tv.setText(String.valueOf(this.count)); //텍스트뷰의 값을 count값으로 지정

       break;

}

다시한번 말씀드리지만, 노란색 부분은 자신이 XML에서 선언한 버튼, 텍스트뷰들의 ID값과 같아야 됩니다.


초록색, 파란색 부분은 따로 설명하겠습니다.


파란부분의 코드는 토스트(Toast)입니다.


토스트라는 이름은 마치 토스터기에서 나오는 빵처럼 화면에 톡~ 나타났다가 사라지는 메시지 라고 생각하시면 될 것 같습니다.


Toast toast = Toast.makeText(MainActivity.this,"100!",Toast.LENGTH_SHORT);

           toast.show();


코드 분석해봅시다.

Toast.makeText의 첫번째 인수는 자신이 토스트를 뿌릴 액티비티를 써주시면 됩니다.

액티비티명.this 형식으로 써줍시다. ex) MainActivity.this


두번째 인수는 Toast에서 출력할 내용을 써주시면 됩니다.

String형 객체의 인스턴스를 인수로 넘겨도 오류없이 컴파일 됩니다.


세번째 인수는 토스트를 띄운후 메시지를 유지하는 시간으로, Toast.LENGTH_SHORT와 Toast.LENGTH_LONG가 있으며 SHORT는 2초, LONG는 4초간 출력합니다.

직접 int값을 넣을 경우 밀리세컨드로 적용됩니다. (1000= 1초)



마지막으로 초록색 부분의 코드설명하고 마치겠습니다.


case R.id.btnexit :

       moveTaskToBack(true);

       finish();

       break;


코드 분석해봅시다.

moveTaskToBack(true);

이 메소드는 현재의 액티비티가 속해있는 테스크를 백그라운드로 즉시 이동됩니다.

바로 액티비티가 종료되는게 아니에요


finish()

현재 액티비티를 종료합니다.





-추가


OnClickListener를 선언하는 방법 한가지 추가

Xml의 버튼 속성에

android:onClick=“메소드명 을  추가하고


Java에

public void 메소드명(View v) {

       // do your code

}

메소드를 추가하면 버튼을 객체로 생성하여 리스너를 등록하는 과정없이 바로 메서드가 호출됩니다.


코드가 간결하여 이방식을 썼었지만 기능을 작성하는 코드와 뷰를 담당하는 레이아웃간의 의존성이 강해지는 단점이 있습니다.


블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,


안드로이드 스튜디오 레이아웃 (LinearLayout, RelativeLayout)



안드로이드 개발을 본격적으로 시작하기 전에 레이아웃부터 시작합니다.


처음 다룰 레이아웃은 리니어 레이아웃입니다.

리니어 레이아웃에는 2가지 종류가 있는데, Horizontal, Vertical로 나뉩니다.


LinearLayout(Horizontal)부터 보겠습니다. Horizontal은 수평이란 의미입니다.

위젯들을 수평으로 배치하는 레이아웃입니다.

아래 사진을 보면 버튼들이 옆으로 배치되는 것을 볼 수 있습니다.






다음은 LinearLayout(Vertical)입니다. Vertical은 수직이란 뜻입니다.

아래 사진을 보면 버튼들이 아래로 배치되는것을 볼 수 있습니다.


사실 리니어 레이아웃의 속성은 XML상에서 변경할 수 있습니다.

아래 사진에 android:orientation=”vertical” ← 이 부분을 horizontal로 변경하면 처음에 다뤘던 LinearLayout(Horizontal)로 변경됩니다.




다음 레이아웃은 RelaytiveLayout입니다.

RelaytiveLayout의 특징은 자식뷰를 상대적으로 배치하는 것입니다.


뷰의 배치 방법은 형제 요소에 대해 상대적으로 지정하는 방법과 부모뷰 영역에 상대적인 위치를 지정하는 방법으로 나눌수 있습니다.


RelativeLayout은 중첩된 형태의 뷰구성이 가능하기 때문에 사용자 인터페이스를 만들 때 굉장히 유용한 녀석으로 쓰입니다.


다음은 RelativeLayout에 사용되는 정렬과 관련된 속성입니다. 크게 형제뷰 기준으로 정렬, 부모뷰 기준으로 정렬 이렇게 두가지로 나뉘게 됩니다.



형제뷰를 기준으로 정렬




부모뷰를 기준으로 정렬



위에 형제뷰, 부모뷰 기준의 정렬 방법들은 외울 필요 없이 그냥 “이 정도가 있구나” 정도로 알아 두시면 되겠습니다.


이 정도로 안드로이드 스튜디오에서 자주 쓰이는 LinearLayout, RelaytiveLayout 설명을 마칩니다.





원본 링크 : http://goo.gl/1jGGKm

블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,

안드로이드 스튜디오 설치 및 환경변수 설정

예전 모교에서 강의했던 안드로이드 관련 자료를 블로그에 포스팅해보려고합니다.

2016년도 자료이니 현재기준으로 조금씩은 다를 수 있는점 양해바랍니다.


Android Studio 다운로드 링크 : http://developer.android.com/sdk/index.html


위 링크를 타고 들어가서 [DOWNLOAD ANDROID STUDIO] 버튼들을 눌러서 다운받아 줍시다.


만약, JDK를 설치 안한 상태라면 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 이 링크를 타고 넘어가서 설치를 합시다.


개발환경이 Widows일때, 32비트일 때는 x86을, 64비트일 때는 x64를 다운로드 받아서 설치하면 됩니다.


2018-05-29 기준으로는 JDK 10까지 나왔군요. JDK 10은 윈도우 64비트만 지원하나봅니다.


JDK 10 Download Link : http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html



JDK를 다운 받은 다음에 시스템 속성에 들어가서 ‘고급 시스템 설정'을 클릭합니다.


시스템 속성에서 ‘고급'에 있는 ‘환경 변수'를 클릭해서, 들어갑니다.


이러한 화면이 나오면, ‘시스템 변수’에 있는 ‘Path’라는 변수를 클릭하여 열어봅시다.


이런식으로 jdk가 설치된 폴더의 bin까지 경로를 복사하여,

위와 같이 C:\앞에 ;를 붙이고 붙여줍시다.

[확인]을 누른다음에 자바 Path설정이 제대로 되었는지 확인을 하려면,


윈도우 메뉴에서 명령 프롬프트 혹은, [Win]+R을 눌러 실행창에서 ‘cmd’를 실행시킨 다음.

위와 같이 ‘javac -version’이라고 입력한 뒤 엔터를 누르면, 제대로 되었을 시 위와 같이 jdk의 버전이 나옵니다.


안드로이드 스튜디오 설치파일을 실행하면, 위와 같이 로딩창이 뜨고, 로딩이 끝나면,


사용자 계정 컨트롤이 나옵니다. 안나와도 문제는 없습니다.

‘예’를 눌러 다음으로 넘어가 줍시다.



Next 버튼을 눌러 넘어갑니다.


여기서 각각 체크박스가 의미하는 바는 위부터 ‘안드로이드 스튜디오'설치여부, ‘안드로이드 SDK’설치여부, AVD(안드로이드 가상 디바이스라고 생각하시면 됩니다.)’설치 여부입니다.

[I Agree] 를 클릭하여 넘어가 줍시다.


위의 경로는 ‘안드로이드 스튜디오'가 설치될 경로고, 아래의 경로는 ‘안드로이드 SDK’가 설치될 경로입니다. 번거로우면, 그냥 ‘Next’를 눌러주시고, 다른 경로에 저장하려면 ‘Browse’를 눌러서 경로를 변경해봅시다.

위는 시작메뉴에 추가할 아이콘의 폴더 이름을 설정하는 칸입니다.

딱히 변경할 필요가 없으므로 ‘Install’을 눌러서 넘어가줍니다.


설치가 끝날 때까지 기다려줍니다.


설치가 끝나면 ‘Next’를 눌러 넘어갑니다.


[NEXT]를 누르게 되면 설치가 완료됩니다.



이제 안드로이드 스튜디오를 실행시켜 줍시다.

이러한 로딩창이 열리면서, 켜지기 시작합니다.


이렇게 안드로이드 스튜디오 창이 제대로 나오면, 성공한 것입니다.

조금 더 기다리면, 이런창이 뜰 수도 있습니다.


참고로 안드로이드 스튜디오를 실행시킬때 오류가 뜨는 대표적인 예는 자바 Path 설정 미스입니다.



원본 링크 : https://goo.gl/zaRjp7



블로그 이미지

덕배님

5년차 S/W 개발자입니다. Android, Unity, JAVA, C, C++, C# 정보를 공유합니다

,