2011년 6월 7일 화요일

SQLite - Date, Time Functions

Functions
date( timestring, modifier, modifier, ...)
time( timestring, modifier, modifier, ...)
datetime( timestring, modifier, modifier, ...)
julianday( timestring, modifier, modifier, ...)
strftime( format, timestring, modifier, modifier, ...)


timestring

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDD.DDDD

modifier

NNN days
NNN hours
NNN minutes
NNN.NNNN seconds
NNN months (see #551 and [1163] )
NNN years (see #551 and [1163] )
start of month
start of year
start of week (withdrawn -- will not be implemented)
start of day
weekday N (see #551 and [1163] )
unixepoch
localtime
utc



현재의 날짜를 알고 싶으면
select date('now');

현재 기준 20일 후의 날짜를 알고 싶으면
select date('now', '20 days');


현재 기준 20일 이전의 날짜를 알고 싶으면
select date('now', '-20 days');

이렇게 조회를 하면 'YYYY-MM-DD' 형태로 조회가 된다.

특정한 양식으로 조회 결과를 얻는다던가, 아니면 일자, 월, 년도만 따로 조회를 하고 싶다면, strftime을 사용하면 된다.

strftime 함수의 format 파라미터에 아래 파라 미터들을 조합해서 원하는 형태로 날짜, 시간을 조회 할 수 있다.

%d  day of month
%f  ** fractional seconds  SS.SSS
%H  hour 00-24
%j  day of year 001-366
%J  ** Julian day number
%m  month 01-12
%M  minute 00-59
%s  seconds since 1970-01-01
%S  seconds 00-59
%w  day of week 0-6  sunday==0
%W  week of year 00-53
%Y  year 0000-9999
%%  %

현재 일시를 'YYYY/MM/DD HH24:MI' 형태로 조회하고 싶다면
select strftime('%Y/%m/%d %H:%M', 'now');


2011년 6월 3일 금요일

Android - Custom ListView

use LayoutInflater


LayoutInflater


This class is used to instantiate layout XML file into its corresponding View objects. It is never be used directly -- usegetLayoutInflater() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on.
(http://developer.android.com/reference/android/view/LayoutInflater.html)



아래 구성 요소들이 필요하다
1. LIST를 구성하는 ROW의 LAYOUT FILE(layout 폴더에 위치, XML)
2. LIST의 내용이 되는 데이터 클래스
3. LIST에 VIEW를 제공하는 ArrayAdapter 상속 클래스



각각 파일 예제


1. ROW의 LAYOUT(layout/add_row.xml)


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:minHeight="60dp"
android:orientation="horizontal"
>
    <LinearLayout android:layout_marginRight="10dp"
          android:layout_height="wrap_content"
          android:id="@+id/linearLayout2"
          android:layout_marginBottom="10dp"
          android:layout_marginTop="10dp"
          android:layout_width="fill_parent"
          android:orientation="horizontal">
        <ImageView android:src="@drawable/icon"
                  android:id="@+id/list_view_row_add_row_icon"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center_vertical"></ImageView>
        <TextView android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/list_view_row_add_row_name"
                  android:text="name"
                  android:layout_gravity="center_vertical"
                  android:textSize="25dp"
                  android:paddingLeft="5dp"></TextView>
    </LinearLayout>

</LinearLayout>

2. DATA 클래스(ActionDTO.java)

import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.view.View.OnClickListener;

public class ActionDTO {

private Drawable icon;
private String title;

public Drawable getIcon() {
return icon;
}
public void setIcon(Drawable icon) {
this.icon = icon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}


3. ArrayAdapter(AddListViewAdapter.java)


import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class AddListViewAdapter extends ArrayAdapter<ActionDTO>{
private Context context;
private int layout;
private ArrayList<ActionDTO> actionList;
private LayoutInflater layoutInflater;


public AddListViewAdapter(Context context, int textViewResourceId, ArrayList<ActionDTO> objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
this.context = context;
this.layout = textViewResourceId;
this.actionList = objects;
                //LayoutInflater 생성
this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ActionDTO action = actionList.get(position);

if(convertView == null){
                        //xml 파일로 정의된 layout 을 View 클래스로 변환
convertView = layoutInflater.inflate(layout, null);
}

if(action != null){
                        //convertView 라는 View 오브젝트를 이용해서 각각의 콤포넌트를 컨트롤
TextView tvName = (TextView) convertView.findViewById(R.id.list_view_row_add_row_name);
ImageView imgIcon = (ImageView) convertView.findViewById(R.id.list_view_row_add_row_icon);

tvName.setText(action.getTitle());
imgIcon.setImageDrawable(action.getIcon());
}

return convertView;
}
}



4. 실제 사용 예제


//listview, arraylist, adapter 초기화
ListView lstActionList = (ListView)findViewById(R.id.list_add);
ArrayList<ActionDTO> arrActionList = new ArrayList<ActionDTO>();
AddListViewAdapter adptActionList = new AddListViewAdapter(this, R.layout.add_row, arrActionList);

//adapter 세팅
lstActionList.setAdapter(adptActionList);

//list의 내용을 채울 ArrayList 작성

res = this.getResources();
ActionDTO action = new ActionDTO();
action.setTitle("ADD");
action.setIcon(res.getDrawable(android.R.drawable.ic_input_add));
arrActionList.add(action);

//listview refresh(?)
adptActionList.notifyDataSetChanged();


Android - Icon Size



ldpi (120 dpi)
(Low density screen)
mdpi (160 dpi)
(Medium density screen)
hdpi (240 dpi)
(High density screen)
xhdpi (320 dpi)
(Extra-high density screen)
Launcher Icon Size36 x 36 px48 x 48 px72 x 72 px96 x 96 px



Download the Icon Templates Pack for Android 4.0

from http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

2011년 6월 2일 목요일

Android - Context

Class Overview
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

어플리케이션 환경에 관한 글로벌 정보를 접근하기 위한 인터페이스. Abstract 클래스이며 실재 구현은 안드로이드 시스템에 의해 제공된다. Context 를 통해, 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있을 뿐만 아니라, 추가적으로, 어플리케이션 레벨의 작업 - Activity 실행, Intent 브로드캐스팅, Intent 수신 등, 을 수행하기 위한 API 를 호출 할 수도 있다.


엄청나게 자주 쓰이지만 개념이 잘 이해가....

그냥 간단히 말하면

Activity, Service 같은 애들의 정보를 가지고 있고, 걔네들을 제어 하는 함수들을 가지고 있는 인터페이스 정도?

2011년 6월 1일 수요일

Item - 작심삼일 [作心三日]

작심삼일 [作心三日]

결심한 마음이 사흘을 가지 못하고 곧 느슨하게 풀어짐. (출처 : 네이버 백과사전)

stand fast to one's resolution굳게 결심을 지키다.

Android - SMS Receiver

link
http://blog.naver.com/kippee?Redirect=Log&logNo=130042489189

잡담 - AdSense 가입 도전중 ㅠ.ㅠ

오늘 다시 가입 신청하고 (이번이 한 10번째? ㅋㅋㅋ)

다시 받은메일...(이것도 한 10번쯤? ㅋㅋㅋ)

"
Google AdSense에 관심을 가져주셔서 감사합니다. 귀하의 신청서를 검토한 결과 귀하의 웹 사이트는 Google 프로그램 기준에 부합하지 않는 것으로 확인되었습니다. 따라서 Google 프로그램에 대한 귀하의 신청을 접수할 수 없습니다.

Google은 Google 광고주뿐 아니라 게시자를 위해서도 Google 광고의 효과를 보장하기 위한 정책을 시행하고 있습니다. Google은 모든 게시자를 검토하고 있으며, 부적합한 웹 사이트를 거부할 권리를 보유합니다. 프로그램이 점차 성장해 감에 따라 더욱 다양한 웹 사이트에 저희 프로그램을 제공해 드릴 수 있도록 노력하고 있습니다.

Google은 자사의 의사 결정에 대한 구체적인 이유와 관련된 질의에는 응답해 드릴 수 없습니다. 양해해 주셔서 감사합니다.

감사합니다.

"



뭐 감사하다고 하면서 가입은 왜 안해주는지?

아니 남들처럼 심사 조차 안해주는 AdSense가 좀 서운하다 (신청한지 1, 2시간만에 메일이 바로 날라옴 ㅋㅋ)

ㅋㅋㅋ

누구 말대로 블로그가 아직 허접하고 글도 별로 없고 해서 가입이 안되는거라고 굳게 믿고 일단은 블로그의 구색을 좀 갖춰야 겠다


그런데... 블로그가 허접해서 그러는게 아니고 다른 문제가 있어서 그러는거면 어쩌지.....

라는 무서운 생각이 ㅋㅋㅋ