2011년 7월 30일 토요일
a] serializable 과 parcelable
사실 의미상 parcel이 패키지니까 +able(할수있다)를 붙여서 parcelable이 더 맞는 표현 인 것 같다.
안드로이드 UI 표현의 hierachy상 객체끼리 이래저래 자료를 주고 받기 힘든 부분이 있을거라고 생각했다. serialize로 해서 되는 구문도 있긴 하더라. Bundle에서 put어쩌구 시리얼 어쩌구 함수가 있는데 이 함수는 시리얼 객체를 저장할수도 있고 실재 에러도 안났다.
꺼내보지는 않았지만.
그리고 parcelable이 안드로이드에 더 적합한 이유는 구현이 복잡하기 때문이다. 그 복잡의 정도는 일일이 넣을 멤버 변수들을 지정해줘야 하는데 있다. 사실 씨리얼라이저블도 객체의 인스턴스(C++에서는 객체의 포인터)를 저장해 놓는 정도 밖에 안된다.
new가 malloc이니까 new해서 메모리에 생성된 객체의 주소만 알 수 있으면 그게 바로 저장의 의미일거다. -> 사실 내 입장에서는 자바의 객체들이 포인터로 밖에는 안보인다. 그래도 컴언어만 20년 넘게 했으니까.
이래저래 찾다보니 국내 블로그에서는 parcelable을 사용한 분들이 string, int 형 그리고 inner class의 class type으로 저장한 분도 계셨다. 하지만 뭔가 부족해 보였다. 자유롭게 전달하려면 void 포인터가 필요하고 거기에 걸맞는 자바 객체는 Object인데 Object 타입으로 주고 받을 수는 없을 것인가?
dest.writeString(imgData);
dest.writeString(geoData);
dest.writeInt(selectedItem);
dest.writeParcelable(imageViewer, 0);
이렇게 구현을 하다보니 string이나 int, array등 기본타입은 문제가 안되는데... 결국 사용자 정의 객체가 문제였다. 그리고 사용자 정의 객체를 저렇게 parcelable로 한다고 해도 그 parcelable에서 또 그 멤버변수를 string이나 int등으로 밖에 쓸 수가 없었다.
메써드를 찾다보니
dest.writeValue(Object v)
가 있더라. 아... 오브젝트 타입으로 보낼수도 있구나. 결국 저게 void point로 보였고, 받는 쪽에서 캐스팅만 잘하면 쓸 수 있다는 희망이 보였다.
하지만 String Array 객체를 저장하려고 열심히 연구중이었는데
dest.writeStringList(thumbsIDList);
가 있다는 걸 알고 한심스러움을 뒤로 하고 fin.
ubuntu] SyntaxError: invalid syntax
2011년 7월 29일 금요일
Math Class
java.lang.Math 클래스
|
1. Math 클래스는 final 제한자로 선언되어 있어 상속할 수 없다.
2. 생성자는 private 제한자로 선언되어 있어 객체 생성을 할 수 없다.
3. 변수와 메소드들은 public과 static 제한자로 선언되어 있기 때문에 객체 생성 없이 클래스 이름만으로 접근할 수 있다.
|
상수
|
값
|
설명
|
Math.E
|
2.718281828459045
|
자연 로그의 밑인 e에 가장 가까운 double 값
|
Math.PI
|
3.141592653589793
|
직경에 대한 원의 원주의 비율인, Pi에 가장 가까운 double 값
|
메소드
|
설 명
|
사용 예
|
ceil()
|
인자로 들어온 값보다 작지 않은 정수 중 같건 가장 가까운 정수를 double 형으로 반환 (올림)
|
ceil(-3.6)
|
round()
|
인자로 들어온 값과 같거나 가장 가까운 정수를 int나 long형을 반환 (반올림), double형이면 long형으로 float형이면 int형으로 반환
|
round(-3.6)
|
floor()
|
인자로 들어온 값보다 크지 않은 정수 중 같거나 가장 가까운 정수를 double형으로 반환 (내림)
|
floor(-3.6)
|
max()
|
인자로 들어온 두 값 중 가장 큰 값을 반환
|
max(3, 4)
|
min()
|
인자로 들어온 두 값 중 가장 작은 값을 반환
|
min(3, 4)
|
sin()
|
삼각함수의 사인 값을 반환
|
sin(30)
|
cos()
|
삼각함수의 코사인 값을 반환
|
cos(45)
|
tan()
|
삼각함수의 탄젠트값을 반환
|
tan(90)
|
abs()
|
인자로 들어온 값의 절대 값을 반환, 음수가 아니라면 인자 값을 그대로 반환, int, long, float, double 형으로 오버로드 되어 있음
|
abs(-3.2)
|
sqrt()
|
인자로 들어온 값의 제곱근을 double 형으로 반환. 음수가 들어왔을 때는 NaN(Not a Number)를 반환
|
sqrt(3)
|
random()
|
0.0과 같거나 크고 1.0 보다 작은 난수를 double 형으로 반환. 정수 값으로 얻기 위해서는 int 형으로 형 변환해야 함
|
random()
|
2011년 7월 28일 목요일
p4:-) 이미지 슬라이딩
우선 예네들을 부르고
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
멤버변수를 선언하고
private GestureDetector mGesture;
private GestureDetector.OnGestureListener mGestureListener;
on Create에다가 얘들을 붙여주면 된다.
mGestureListener = new OnGestureListener() {
public boolean onDown(MotionEvent e) {
Log.d("hjh", "onDown");
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.d("hjh", "onLongPress");
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
Log.d("hjh", "onScroll");
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.d("hjh", "onShowPress");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Log.d("hjh", "onSingleTapUp");
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.d("hjh", "onFling");
return false;
}
};
mGesture = new GestureDetector(mContext, mGestureListener);
vImageView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
mGesture.onTouchEvent(event);
return false;
}
});
그런데 문제는... 다운이나 롱프레스의 경우 문제가 아니지만...
vImageView.setOnTouchListener(new OnTouchListener() { 에서 리스너를 달 때
달리는 넘이 스크롤이 없는 넘이면 스크롤과 플링(옆으로 쏴악 재껴주는... 이미지 슬라이딩의 핵심)
은 로그가 안 찍힌다는 것이다. 즉, 스크롤이 가능한 뷰에 리스너를 달아야 플링 이벤트를
캣치 할 수 있다는 것.
아놔. 구려. 걍 x, y 좌표 계속 캣치해부려. ㅋㅋ
그래도 안들호가 제공하는 API를 써야 편할 듯.
2011년 7월 27일 수요일
p4:-) Image Viewer.
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:topOffset="100dp" android:handle="@+id/handle" android:content="@+id/content">
android:layout_width="fill_parent" android:layout_height="30dp" />
-
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="#fff">
android:layout_height="wrap_content" android:textColor="#000000"
android:text="여기에 제목 같은거" />
android:layout_height="wrap_content" android:textColor="#000000"
android:text="여기에 내용이 들어갑니다." />
슬라이딩 뷰어를 이걸로 구현할수는 없다. 안드로이드 정보의 원천인 안드로이드 펍에도 답이 없더라 ㅠ.ㅠ
어머니 때문에 ImageViewer 를 심플하게 만들었는데... 이제 어느 정도 사용을 하실 줄 아시니
나의 뷰어는 버림을 받았다.
그래서 기능 업뎃 좀 해보려고 ^^ 호호홍
P1:-) 몸무게가 빨리 줄어드는 이유
몸에서 수분이 빠져나가서 그런거란다.
몸에서 빼야할건 지방인데
지방이 들어있는 음식을 먹고 지방을 뺀다는 건 어폐가 있는 것이다.
사실 복합적인 음식을 먹고 지방도 계산하면 되겠지만 그게 어렵기 때문에
단일 식품을 먹는 것 같다.
P3:-) 긍정 프로젝트
사실 내가 생각하는 의식수준은 가장 밑바닥아라고
볼 수 있다. 이것이 깨달음이라고도 볼 수 있지만
문제는 나의 언어수준도 더이상 위트가 존재하지 않게 되었다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
금일 오는 길에 비가 억수같이 와서 옷이 다 젖었다.
어제 어머니께서 비 때문에 택시를 못잡아서 열차를 놓치셨다.
젖은 상태로 있으니 어제 열차를 놓치신게 잘 되었다는 생각이 들었다.
늦게 가도 괜찮았고, 비 맞은 상태로 내려가는건 찝찝하기 때문이다.
오늘 내가 비를 맞아서 간과했던 또 다른 생각이 떠오른 것이다.
2011년 7월 26일 화요일
P2) 안드로이드 마켓등록 시간
예전엔 올리면 2분 안쪽이었는데 이제는 꼬박 하루가 걸린다.
LGU+는 도대체 어느 마켓에 접속하도록 놔뒀는지.
아직도 보이지 않고 있다:-)
믓튼 수원맛집 일탄이 나왔다 :-)
어머니께서 금일 부산으로 내려가시니 앞으로 업뎃은 다른 사람에게 맡길까 고려중이다:-)
아니면 다른 사람 의견받고 크래딧에 적는식으로. . .
이제 소라랑 맛집 가면서 앱을 마무리 지으려고 한다:-)
P1) 몸무게 그대로
거제도에서 이틀 놀고 사회 생활한다고 발렌타인 21 년산에 소즈 맥주폭탄으로 마셨다:-)
라면도 먹고 고기도 엄청:-)
하지만 종완이가 있어 선 단백질 후 잡다한 영양소를 조금이나마 실천할수 있었다:-
놀러갔지만 일부러 수영도 뻑시게하고 턱걸이도 하고 잤다
국밥도 먹고 그랬지만
몸무게는 200 :-D 줄었다 ㅋㅋㅋ
오늘부터는 닭가슴살과 셀러드로 다시 달리는 거야
목표는 58 킬로그램
2011년 7월 22일 금요일
Threads
메소드 명
|
기 능
|
start()
|
스레드를 실행 가능 상태로 전이
|
stop()
|
스레드의 실행을 중지
|
sleep(long millis)
|
지정된 시간 동안 스레드를 쉬게 함
|
wait()
|
현재의 스레드를 기다리게 함
|
suspend()
|
스레드의 실행을 일시적으로 중단
|
notify()
|
wait()메소드에 의해 기다리고 있던 하나의 스레드를 깨움
|
notifyAll()
|
wait()메소드에 의해 기다리고 있던 모든 스레드를 깨움
|
resume()
|
일시적으로 중단된 스레드를 실행
|
UPBIT is a South Korean company, and people died of suicide cause of coin investment.
UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...
-
연휴 마지막날 아침... 산책을 하다 한장 찍어보았다. 인생도 마찬가지로 길의 끝을 모른체 선택을 해야하는 경우가 발생한다. 나중에 그 기준이 바뀔수도 있지만. 지금 기준은 많은 사람이 함께 갈 수 있는 길을 선택하고 싶다.
-
□ native modifier 는 자바가 아닌 다른 언어로 작성된 코드를 자바에서 사용하기 위한 것 □ transient modifier 는 객체가 직렬 화되는 과정에서 해당 필드가 저장되지 않아야 한다는 것을 알리기 위해 사용 ...
-
제로보드 세팅. sudo apt-get install apache2 mysql-server libapache2-mod-php5 phpmyadmin ssh 패키지를 이용한 소프트웨어 설치 - APM세팅 및 ssh 설치 ...