기본 내장 모듈중에 주로 많이 쓰이는 모듈을 알아보자


url모듈

var url = require(‘url’);

parse(String)

URL문자열을 URL객체로 변환해 리턴

parse(String, true)

두 번째 매개변수에 true하면 query를 사용

format(Obj)

URL객체를 URL문자열로 변환해 리턴

resolve(from, to)

매개 변수를 조합하여 완전한 URL 문자열 생성

 

util 모듈

var util = requird(‘util’);

format

매개변수로 입력한 문자열을 조합해 리턴

 

File System 모듈

var fs = require(‘fs);

readFile(file, encoding, callback)

파일을 비동기로 읽음

readFileSync(file, encoding)

파일을 동기로 읽음

writeFile(file, data, encoding, callback)

파일을 비동기로 씀

writeFileSync(file, data, encoding)

파일을 동기로 씀

 

encoding 방식 : utf8

파일을 읽고 쓸때는 반드시 예외처리를 할 것

동기방식

try{}catch(e){} 사용

비동기 방식

if(err){}else{}사용


'Programming > Node.JS' 카테고리의 다른 글

http모듈  (0) 2016.09.03
Event개념 이해  (0) 2016.09.03
전역 객체에 대하여  (0) 2016.09.03
node.js 특징  (0) 2016.09.03
Node.js 에서 JSON 사용하기  (0) 2016.08.27

전역객체

 

전역변수

__filename

현재 실행중인 코드의 파일경로

__dirname

현재 실행중인 코드의 디렉토리 경로

 

전역 객체

console

콘솔화면과 관련된 기능을 다루는 객체

log()

출력

time(label)

시간측정 시작

timeEnd(label)

시간측정 종료

사용 가능한 서식문자

%d : 숫자, %s: 문자열, %j : JSON

exports

모듈과 관련된 기능을 다루는 객체

(모듈을 사용하여 기능을 확장함)

모듈을 생성할 때는 exports 객체

모듈을 추출할 때는 require 객체

process

프로그램과 관련된 기능을 다루는 객체

argv

실행 매개변수

env

컴퓨터 환경정보

version

Node.js의 버전

arch

프로세서의 아키텍처

platform

플랫폼


exit()

프로그램종료


'Programming > Node.JS' 카테고리의 다른 글

Event개념 이해  (0) 2016.09.03
기본 내장 모듈  (0) 2016.09.03
node.js 특징  (0) 2016.09.03
Node.js 에서 JSON 사용하기  (0) 2016.08.27
Nodejs로 serial통신하기  (0) 2016.08.25


Nods.js2009년 라이언달이 개발한 서버 개발환경

크롬 브라우저에서 사용하는 V8 자바스크립트 엔진을 사용


이벤트 기반 비동기 방식

(CallBack)

- 한 사람이 커피숍에서 진동벨을 받고 다른일을하는 형식

- 사용자가 많아져도 시스템 자원을 많이 먹지 않음

이벤트를 받으면 동작하는 방식

스레드 기반 동기방식

- 한 스레드가  한번에 여러 프로세스를 처리하는 방식

- 사용자가 많아지면 부하가 많이 걸림


장점 : 이벤트 기반 비동기식 방식으로 속도가 빠르며, 부하가 크게 걸리지않음, 대규모 작업에 큰 두각을 나타냄


단점 : 프로그램진행에 문제가 발생하는 순간, 프로그램 전체가 영향을 받음, 대용량 파일 처리시 속도가 매우 느려짐


'Programming > Node.JS' 카테고리의 다른 글

Event개념 이해  (0) 2016.09.03
기본 내장 모듈  (0) 2016.09.03
전역 객체에 대하여  (0) 2016.09.03
Node.js 에서 JSON 사용하기  (0) 2016.08.27
Nodejs로 serial통신하기  (0) 2016.08.25

여름방학 프로젝트 중에 백그라운드에서 Thread를 통해 TextView를 바꾸어 주어야 할일이 생겼다.

잊어버리기전에 적어놓자



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            mTemperture.setText(Temperture);
            ...
        }
    };
 
    @Override
    protected void onStart() {
        super.onStart();
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        handler.sendMessage(handler.obtainMessage());
                        Thread.sleep(100);
                    } catch (Throwable e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.setDaemon(true);
        thread.start();
        Toast.makeText(getApplication(),"START",Toast.LENGTH_SHORT).show();
    }
cs


센서값을 받아올때는 Thread를 이용하여 받아오도록하였다.

sendMessge에서 보낸 msg를 handleMessge의 msg로 받아 handleMessage에서 처리한다.


또한 handler.ontainMessage()에 메시지를 사용하여 전송하고싶다면

Message msg = handler.ontainMessage(); 를 선언하여

msg.what(int)

msg.obj(Object)

msg.arg1(int)

msg.arg2(int) 등의 메시지를 담아서 전송할수도 있다.


sendemptymessage(int what)을 사용하면 ID만 핸들러로 전송할 수있다.

그러면 핸들러에서는 if(msg.ID == 0){ }안에서 수행을 해야겠지?

 

Deamon Thread 설정 : 메인스레드가 종료되면 이 스레드도 따라 종료됨, 스레드 종속성을 설정해줌




'Programming > Android' 카테고리의 다른 글

R  (0) 2016.09.05
안드로이드의 구성요소 요약  (0) 2016.09.05
Toolbar  (0) 2016.09.03
manifest  (0) 2016.09.02
notification 고정시키기  (1) 2016.08.28

안드로이드 스튜디오를 켜서 템플릿을 보니 네비게이션 템플릿이 있었다.

그래서 오늘은 이에대해 공부해보기로 하였다.


먼저 템플릿을 선택하여 접속하여 컴파일해보면 아래와 같은 그림이 나오는데, 



안드로이드에서 Sample있는 부분이 툴바라는 부분이다.



1
2
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
cs

위와 같이생성되며 onCreate() 에 액티비티 생성후 만들면 된다.

그러면 이제 왼쪽에서부터 어떻게 만드는지 차례대로 살펴보자

1
2
3
4
5
6
7
8
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
 
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
cs

위외 같이 네비게이션 뷰를 생성하고 싶다면 이렇게 생성한다. 

ActionBarDrawerToggle의 매개변수는 다음과 같다.
1
2
ActionBarDrawerToggle (Activity activity, DrawerLayout drawerLayout,
        int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes)
cs



 R.string.navigation_drawer_open와 R.string.navigation_drawer_close는 String.xml에

1
2
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>



로 저장되어있다.




네비게이션 뷰를 누르면 이런 화면이 뜨는데, 이러한 화면은 xml에서 만들어준다. 또한 위의 코드 6-7 라인이 없으면 각각의 아이템이 클릭이 되지않는다.

아래 코드는 네비게이션 뷰 xml파일이다. 

살펴보면

android:checkableBehavior="single" 이 부분이있는데 선택형태를 정해주는 부분이다.

그종류로는 none, single, all 이 있는데, 차례대로 none은 단순리스트형태, single은 라디오 버튼형태로 단일 선택형, all은 체크박스 형태로 다중선택형을 나타낸다.

지금으로써는 없어도 무방하다.

그리고 item밑에 하위 item도 사용할수 있다. 23번라인부터 끝까지 보면 communicate로 구분을 지어서 사용하고 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 
    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_camera"
            android:icon="@drawable/ic_menu_camera"
            android:title="Import" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_manage"
            android:icon="@drawable/ic_menu_manage"
            android:title="Tools" />
    </group>
 
    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_menu_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>
 
</menu>
 
cs



그다음은 오른쪽 맨끝에있는 옵션바를 살펴보자.



1
2
3
4
5
6
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
cs

옵션메뉴는 프래그먼트로 만들어져 있으며, 위와같이 추가한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            Toast.makeText(getApplicationContext(),"settings",Toast.LENGTH_SHORT).show();
            return true;
        }else if(id == R.id.action_sample){
            Toast.makeText(getApplicationContext(),"sample",Toast.LENGTH_SHORT).show();
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }

cs

옵션메뉴의 메뉴를 클릭했을때 각각의상태는 위와 같이 사용하며,

현재는 settings 와 samples 항목을 만들었고 Toast로 선택시 각각의 메시지를 띄워주게 만들었다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
 
    <item
        android:id="@+id/action_sample"
        android:orderInCategory="100"
        android:title="@string/action_samples"
        app:showAsAction="never" />
</menu>



옵션메뉴의 xml은 위와 같이 만들었으며, 


1
2
<string name="action_settings">Settings</string>
<string name="action_samples">Samples</string>

cs


title은 string.xml에 위와같이 저장되어있다.



toolbar를 사용하여 액티비티위에 여러 메뉴를 만들수 있어서,

어플리케이션 구현시 효율적이고 이쁘게 만들수 있을것 같다.

'Programming > Android' 카테고리의 다른 글

안드로이드의 구성요소 요약  (0) 2016.09.05
Thread (백그라운드에서 UI변경)  (0) 2016.09.03
manifest  (0) 2016.09.02
notification 고정시키기  (1) 2016.08.28
JSONobject 과 JSONarray  (0) 2016.08.27

summary

어플리케이션의 프로필 느낌

어플리케이션에 대한 전반적인 정보를 담고 있는 파일

안드로이드 시스템에서 어플리케이션의 정보를 알아내는데 사용

어플리케이션의 컴포넌트(액티비티, 서비스, 브로드캐스트, 컨텐츠 프로바이더)가 존재

어플리케이션의 이름, 사용하는 라이브러리 등 어플리케이션에 대한 모든 정보가 포함

어플리케이션의 퍼미션 지정


GUI 설정 메뉴는 크게 Manifest, Application, Permissions, Instrumentation으로 구성되어 있으며, AndroidManifest.xml 탭을 클릭하면 실제로 코드를 보면서 수정할 수 있게 되어있다.

 

<manifest> 태그

 

안드로이드 메니페스트 파일은 레이아웃 파일과 유사하게 <manifest> 태그가 전체를 감싸는 구조

manifest 태그의 안에 아래에서 다루게 될 application 태그, uses-permission 태그 등

 

manifest 태그의 속성으로는 여기에서 사용할 네임스페이스를 지정해주는 xmlns:android 속성, 어플리케이션의 패키지명 및 버전 등

 

1
2
3
4
5
6
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidhuman.HelloAndroid"
    android:versionCode="1"
    android:versionName="1.0">
    // 어플리케이션 태그 및 Permission 태그
</manifest>
cs

 

<application> 태그

 

메니페스트 파일에는 단 한 개의 어플리케이션 태그

이는 어플리케이션에 대한 정보 (어플리케이션 이름, 아이콘, 테마 등) 뿐 아니라 어플리케이션 내의 컴포넌트들에 대한 태그들을 포함

 

1
2
3
4
5
6
7
8
9
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
</application>
cs

 

1. <activity> 태그

 

어플리케이션 내의 각 액티비티 마다 이 activity 태그가 필요

activity 태그에는 액티비티의 이름, 클래스 이름 및 액티비티가 받을 수 있는 인텐트가 정의되어 있는 인텐트 필터를 포함

메니페스트 파일에 액티비티가 정의되어 있지 않다면 해당 액티비티를 실행시킬 수 없으므로 런타임 오류가 발생

메니페스트 파일에 액티비티를 정의

 

1
2
3
4
5
6
7
<activity android:name=".MainActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
cs

 

2. <service> 태그

 

액티비티와 마찬가지로 서비스 또한 액티비티와 마찬가지로 각 서비스마다 서비스 태그를 정의해주어야 함

서비스를 실행할 수 있는 인텐트가 정의된 인텐트 필터를 포함

 

1
2
3
4
5
6
<service android:name=".app.RemoteService" android:process=":remote">
    <intent-filter>
        <action android:name="com.example.android.apis.app.IRemoteService" />
        <action android:name="com.example.android.apis.app.REMOTE_SERVICE" />
    </intent-filter>
</service>
cs


3. <provider> 태그

 

어플리케이션의 컨텐트 프로바이더 (Content Provider)를 등록하기 위해 사용

컨텐트 프로바이더는 어플리케이션 내의 데이터베이스를 다른 어플리케이션이 공유할 수 있도록 해주는 역할.

 

1
2
<provider android:name=".app.SearchSuggestionSampleProvider"
android:authorities="com.example.android.apis.SuggestionProvider" />
cs

 

4. <receiver> 태그

 

어플리케이션이 브로드캐스트 메시지 (시스템의 상태정보에 관련된 메시지 : 인텐트로 구성됨)를 수신할 수 있도록 합니다. <receiver> 태그 안에 인텐트 필터를 정의하여 어떠한 브로드캐스트 메시지에 반응할지를 지정합니다.

 

1
2
3
4
5
6
7
<receiver android:name=".appwidget.ExampleAppWidgetProvider">
<meta-data android:name="android.appwidget.provider"
    android:resource="@xml/appwidget_provider" />
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
</receiver>
cs


5. <uses-permission> 태그

 

어플리케이션에 시스템의 여러가지 정보들 (위치정보, SMS 수신, 전화 걸기, 주소록 읽기, 인터넷 사용 등...)을 사용하기 위해서는 그에 해당하는 권한이 필요

<uses-permission> 태그에는 이렇게 어플리케이션에서 필요한 권한들을 정의

 

1
2
3
4
5
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
cs


'Programming > Android' 카테고리의 다른 글

Thread (백그라운드에서 UI변경)  (0) 2016.09.03
Toolbar  (0) 2016.09.03
notification 고정시키기  (1) 2016.08.28
JSONobject 과 JSONarray  (0) 2016.08.27
AsyncTask  (0) 2016.08.26

setOngoing(true)추가하기

1
2
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setOngoing(true);
cs


'Programming > Android' 카테고리의 다른 글

Toolbar  (0) 2016.09.03
manifest  (0) 2016.09.02
JSONobject 과 JSONarray  (0) 2016.08.27
AsyncTask  (0) 2016.08.26
AccessibilityService  (0) 2016.08.26

JSON이란, Javascript Object Notaion의 약자로써, 자바스크립트 객체 표기법을 뜻하며

쉽게 생각하면 그냥 데이터 표현 방법이다. JSON은 실무에서도 굉장히 많이 쓰이니 꼭 알아 놓도록하자.

JSON의 구조는 크게 2가지인데, JSONObject와 JSONArray이다. 순서대로 알아보도록하다.


1. JSONObject

구조 : {"name", "shin", "age": 24}

사용방법 :

JSONObject jObj = new JSONObject;

jObj.put("name": "shin");

jObj.put("age": "24");


String input = jObj.toString();

input값 :  {"name", "shin", "age": 24}


String data = jObj.get("name");

get값 : shin


2. JSONArray

구조 : [{"name":"shin"},{"name":"kang"}]

사용방법 : 

String data = "[{\"Product\" : \"Mouse\", \"Maker\":\"Samsung\", \"Price\":23000},"
               + "{\"Product\" : \"KeyBoard\", \"Maker\":\"LG\", \"Price\":12000},"
               + "{\"Product\":\"HDD\", \"Maker\":\"Western Digital\", \"Price\":156000}]";
try{
   String result = "";
   JSONArray jArray = new JSONArray(data);
   for (int i = 0; i < jArray.length(); i++){
      JSONObject jObj = jArray.getJSONObject(i);
      result += "product: " + jObj.getString("Product") + ", maker: " + jObj.getString("Maker") +
                  ", price: " + jObj.getInt("Price") + "\n";
   }
}catch (JSONException e){ }

결과값 :  result : product: Mouse, maker: Samsung, price: 23000
product: KeyBoard, maker: LG, price: 12000
product: HDD, maker: Western Digital, price: 156000
출처 : http://biig.tistory.com/52



JSONObject 안에 Array를 넣어서 사용할수도 있다.

"jObj":{
"name" : "me",
"entuty":[
{"name":"shin"},
{"name":"kang"},
{"name":"choi"}
]
}


'Programming > Android' 카테고리의 다른 글

manifest  (0) 2016.09.02
notification 고정시키기  (1) 2016.08.28
AsyncTask  (0) 2016.08.26
AccessibilityService  (0) 2016.08.26
Intent와 Intent Filter  (0) 2016.08.26

+ Recent posts