使用ScrollView的android NullPointerException

使用ScrollView的android NullPointerException,android,nullpointerexception,android-scrollview,Android,Nullpointerexception,Android Scrollview,嗨,我有这个scrollView(特别是TolerantScrollView.java)。它包含一个多列listview视图(一个2列listview,类似于带适配器的pinterest),问题出在某些方面 手机上的scrollview没有问题,但在其他手机上,它会因以下NullPointerException而崩溃 FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.ScrollView$Touch

嗨,我有这个scrollView(特别是TolerantScrollView.java)。它包含一个多列listview视图(一个2列listview,类似于带适配器的pinterest),问题出在某些方面 手机上的scrollview没有问题,但在其他手机上,它会因以下NullPointerException而崩溃

FATAL EXCEPTION: main
java.lang.NullPointerException
   at android.widget.ScrollView$TouchMoveRunnable.touchDraw(ScrollView.java:566)
   at android.widget.ScrollView$TouchMoveRunnable.run(ScrollView.java:453)
   at android.os.Handler.handleCallback(Handler.java:605)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:4477)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
   at dalvik.system.NativeStart.main(Native Method)
这是宽容的scrollview类,我尝试过用try-catch类包装onTouchEvent,因为似乎错误发生在onTouchEvent()方法上,但NullPointerException仍然发生

public class TolerantScrollView extends ScrollView {

    private int mLastX;
    private int mLastY;

    private int distanceX;
    private int distanceY;

    private int mTouchSlop;

    public TolerantScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public TolerantScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public TolerantScrollView(Context context) {
        super(context);
        init();
    }

    private void init(){
        /**
         * define touch slop according to the display
         */
        final ViewConfiguration configuration = ViewConfiguration.get(getContext());
        mTouchSlop = configuration.getScaledTouchSlop();
    }
    /**
     * Processes every touch event through the {@link #onTouchEvent(MotionEvent)}
     * and intercepts if only we have restricted vertical scrolling.
     * <p>
     * 
     * {@inheritDoc}
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        onTouchEvent(ev);
        int dy = 0;
        int dx = 0;
        switch(ev.getAction()){
        case MotionEvent.ACTION_DOWN:
            distanceX = 0;
            distanceY = 0;
            mLastX = (int) ev.getX();
            mLastY = (int) ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            dx = Math.abs((int) (mLastX - ev.getX()));
            mLastX = (int) ev.getX();
            distanceX += dx;
            dy = Math.abs((int) (mLastY - ev.getY()));
            mLastY = (int) ev.getY();
            distanceY += dy;
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            // define whether we have vertical scrolling 
            // without horizontal one and intercept if so
            if (distanceY > mTouchSlop && distanceX < mTouchSlop){
                Log.d(VIEW_LOG_TAG, "intercepted");
                return true;
            }       
            distanceX = 0;
            distanceY = 0;
            break;
        }
        return false;
    }
}
公共类公差ScrollView扩展了ScrollView{
私人内特mLastX;
私营企业;
私有整数距离;
私密距离;
姆图什洛普私人酒店;
公共公差滚动视图(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
init();
}
公共公差滚动视图(上下文、属性集属性){
超级(上下文,attrs);
init();
}
公共公差滚动视图(上下文){
超级(上下文);
init();
}
私有void init(){
/**
*根据显示定义触摸坡度
*/
final ViewConfiguration=ViewConfiguration.get(getContext());
mTouchSlop=configuration.getScaledTouchlop();
}
/**
*通过{@link#onTouchEvent(MotionEvent)}处理每个触摸事件
*如果我们限制了垂直滚动,就会被拦截。
*
* 
*{@inheritardoc}
*/
@凌驾
公共布尔值onInterceptTouchEvent(MotionEvent ev){
火山口(ev);
int-dy=0;
int dx=0;
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:
距离x=0;
距离y=0;
mLastX=(int)ev.getX();
mLastY=(int)ev.getY();
打破
case MotionEvent.ACTION\u移动:
dx=Math.abs((int)(mLastX-ev.getX());
mLastX=(int)ev.getX();
距离x+=dx;
dy=Math.abs((int)(mLastY-ev.getY());
mLastY=(int)ev.getY();
距离y+=dy;
打破
case MotionEvent.ACTION\u取消:
case MotionEvent.ACTION\u UP:
//定义是否有垂直滚动
//没有水平线,如果有则截取
如果(距离>mTouchSlop&&distanceX

为什么会发生NullPointerException?LGOptimus G上不会发生错误,但LG Optimus It(L-05D)上的滚动崩溃。

LG Optimus G和LG Optimus L-05D的操作系统版本是什么?LG Optimus L-05D是安卓版本4.0.4,LG Optimus G是安卓版本4.1.2。我真的不知道为什么L-05D会出现这种情况。它在LG Optimus G上运行良好吗?这是我也遇到过的问题,android 4.0x似乎在自定义视图方面确实存在一些问题!!,自定义视图在<4.0上运行良好,我认为您应该做一些研究,如果运气不好,可以在android google组中提出问题。它在LG Optimus G上运行良好。。。