Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刷卡时出现空指针异常_Java_Android_Nullpointerexception_Swipe Gesture - Fatal编程技术网

Java 刷卡时出现空指针异常

Java 刷卡时出现空指针异常,java,android,nullpointerexception,swipe-gesture,Java,Android,Nullpointerexception,Swipe Gesture,我在刷卡时得到一个NullPointerException。什么是错误的,如何纠正?异常在方法onTouchEvent中由语句返回gestureDetector.onTouchEvent(事件)触发 这个活动(List8)被称为类Tabs3中的TabActivity,它也是为了完成而提供的 package myapp.tabnavui; import myapp.tabnavui.R; import android.app.ListActivity; import android.conte

我在刷卡时得到一个
NullPointerException
。什么是错误的,如何纠正?异常在方法
onTouchEvent
中由语句
返回gestureDetector.onTouchEvent(事件)触发

这个活动(List8)被称为类Tabs3中的TabActivity,它也是为了完成而提供的

package myapp.tabnavui;

import myapp.tabnavui.R;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.AbsListView;
import android.widget.Toast;

import java.util.ArrayList;


/**
 * A list view that demonstrates the use of setEmptyView. This example alos uses
 * a custom layout file that adds some extra buttons to the screen.
 */
public class List8 extends ListActivity {

    private GestureDetector gestureDetector;
    PhotoAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Use a custom layout file
        setContentView(R.layout.list_8);

        // Tell the list view which view to display when the list is empty
        getListView().setEmptyView(findViewById(R.id.empty));

        // Set up our adapter
        mAdapter = new PhotoAdapter(this);
        setListAdapter(mAdapter);

        // Wire up the clear button to remove all photos
        Button clear = (Button) findViewById(R.id.clear);
        clear.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mAdapter.clearPhotos();
            } });

        // Wire up the add button to add a new photo
        Button add = (Button) findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                mAdapter.addPhotos();
            } });
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }


    /**
     * A simple adapter which maintains an ArrayList of photo resource Ids. 
     * Each photo is displayed as an image. This adapter supports clearing the
     * list of photos and adding a new photo.
     *
     */
    public class PhotoAdapter extends BaseAdapter {

        private Integer[] mPhotoPool = {
                R.drawable.sample_thumb_0, R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,
                R.drawable.sample_thumb_3, R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
                R.drawable.sample_thumb_6, R.drawable.sample_thumb_7};

        private ArrayList<Integer> mPhotos = new ArrayList<Integer>();

        public PhotoAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mPhotos.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            // Make an ImageView to show a photo
            ImageView i = new ImageView(mContext);

            i.setImageResource(mPhotos.get(position));
            i.setAdjustViewBounds(true);
            i.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT));
            // Give it a nice background
            i.setBackgroundResource(R.drawable.picture_frame);
            return i;
        }

        private Context mContext;

        public void clearPhotos() {
            mPhotos.clear();
            notifyDataSetChanged();
        }

        public void addPhotos() {
            int whichPhoto = (int)Math.round(Math.random() * (mPhotoPool.length - 1));
            int newPhoto = mPhotoPool[whichPhoto];
            mPhotos.add(newPhoto);
            notifyDataSetChanged();
        }

    }

    class MyGestureDetector extends SimpleOnGestureListener {
          private static final int SWIPE_MAX_OFF_PATH = 200;
          private static final int SWIPE_MIN_DISTANCE = 50;
          private static final int SWIPE_THRESHOLD_VELOCITY = 200;

        @Override
        public boolean onDown (MotionEvent e) {
            return true;
        }

          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
               if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                   return false;
               // left to right swipe and right to left swipe
               if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
                 && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    // left swipe
                    Toast t = Toast.makeText(List8.this, "Left swipe", Toast.LENGTH_LONG);
                    t.show();
                    startActivity(Tabs3.tab1);
                    return true;
               } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                 && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    // right swipe
                    Toast t = Toast.makeText(List8.this, "Right swipe", Toast.LENGTH_LONG);
                    t.show();
                    startActivity(Tabs3.tab3);
                    return true;
               }
               return false;
          }    
    }    
}
理由
选项卡3.gestureDetector
列表8.gestureDetector
从未设置,因此它们为
null

这就是为什么当您尝试在
gesturedector.onTouchEvent(事件)中使用它时,会得到
NullPointerException

解决方案 基于,您需要在创建时使用以下设置:


谢谢,就这样!诚然,这是一个离题的话题,但你知道我怎样才能让右击看起来像右击吗?正确的活动显示正确,但在这两种情况下,下一个屏幕都从右向左滑动。(容易)改变吗?@user1837293对不起,我不知道android api,我只能帮助你,因为你的问题是由java编程错误引起的,实际上与api无关。。。
package myapp.tabnavui;

import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TabHost;
import android.widget.Toast;
import android.app.TabActivity;
import android.content.Intent;

/**
 * An example of tab content that launches an activity via {@link android.widget.TabHost.TabSpec#setContent(android.content.Intent)}
 */
public class Tabs3 extends TabActivity {

    private GestureDetector gestureDetector;
    // View.OnTouchListener gestureListener;
    // Intent go;
    public static Intent tab1, tab2, tab3; 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final TabHost tabHost = getTabHost();

        tab1 = new Intent(this, List1.class);
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("list")
                .setContent(tab1));

        tab2 = new Intent(this, List8.class);
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator("photo list")
                .setContent(tab2));

        // This tab sets the intent flag so that it is recreated each time
        // the tab is clicked.
        tab3 = new Intent(this, Controls2.class);
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("destroy")
                .setContent(tab3
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    // code
    gestureDetector = new GestureDetector(new MyGestureDetector());
    // code
}