안녕하세요...
다른 폰에서는 다되는데 갤럭시넥서스 ics에서 는 안되는 문제가 발생했습니다.
Null 포인트가 찍히고요
gestureDetector.java:587
Gallery.java:937 ..... 등등의 에러가 남습니다.
갤러리를 상속 받은 클래스안에 그림을 넣어 나타내는데요
어플실행하면 나타나는데
그안의 그림을 클릭하는 순간 에러가 나서 앱이 꺼집니다..
이게 왜 문제가 되는 걸까요 ㅜㅜ
다른 폰에서는 다되는데.....
오류가 발생했을 때의 logcat 을 올려주셔야 더 정확하게 알 것 같습니다만 일단 추정되는 부분을 적어봅니다.
1. onFling 에서 onKeyDown을 호출하는건 안 좋아보입니다.
제가 알기로는 onXXX 메소드는 안드로이드 시스템에서 호출하는 용도로 만든 것으로
앱 내부에서 호출하면 문제가 생길 수 있습니다.
예를 들어 위 코드의 경우 onKeyDown을 호출하고 onKeyUp을 호출하지 않는데,
이러면 안드로이드 내부 상태가 꼬일 가능성이 있지요.
onXXX 메소드를 호출하는게 가능한 경우는 메소드 내에서 자기 부모 클래스의 같은 메소드를 호출하는 경우 뿐입니다.
2. onKeyDown을 호출할 때 두번째 매개변수로 null값을 넘기는데, 그러면 안됩니다.
아마도 onKeyDown 내부에서 KeyEvent객체를 사용하려다 NullPointerException 이 난게 아닐까 추정되네요.
물론 제가 잘못알고 있는 것일 수도 있습니다.
04-16 13:45:02.411: E/AndroidRuntime(6520): FATAL EXCEPTION: main
04-16 13:45:02.411: E/AndroidRuntime(6520): java.lang.NullPointerException
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.GestureDetector.onTouchEvent(GestureDetector.java:587)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.widget.Gallery.onTouchEvent(Gallery.java:937)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.View.dispatchTouchEvent(View.java:5486)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1953)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1714)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.View.dispatchPointerEvent(View.java:5662)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2863)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.os.Looper.loop(Looper.java:137)
04-16 13:45:02.411: E/AndroidRuntime(6520): at android.app.ActivityThread.main(ActivityThread.java:4340)
04-16 13:45:02.411: E/AndroidRuntime(6520): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 13:45:02.411: E/AndroidRuntime(6520): at java.lang.reflect.Method.invoke(Method.java:511)
04-16 13:45:02.411: E/AndroidRuntime(6520): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteI
이렇게 로그가 남습니다 ㅠㅠ




public class Ma_Gallery extends Gallery {
public Ma_Gallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int keyCode;
if(e2.getX() > e1.getX()){
keyCode = KeyEvent.KEYCODE_DPAD_LEFT;
}
else{
keyCode = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(keyCode, null);
return true;
}
}
갤러리 상속 받은 클래스 입니다.