我在两行中得到空指针异常。我在代码中使用注释指定。我已经启动了所有变量并实现了所有方法,但仍然无法弄清楚。请让我知道为什么它显示空指针异常?
public class PhotoActivity extends Activity implements SetPhotos, OnGestureListener{
private static final float SWIPE_THRESHOLD = 100;
private static final float SWIPE_VELOCITY_THRESHOLD = 100;
ArrayList<String> url = new ArrayList<String>();
ImageView iv;
@SuppressLint("UseSparseArrays")
HashMap<Integer, Bitmap> imagemap = new HashMap<Integer,Bitmap>();
Handler handler = new Handler();
String mode;
int i=0;
@SuppressWarnings("deprecation")
GestureDetector swipe = new GestureDetector(this);
private LruCache<Integer, Bitmap> cache;
final int max = (int) (Runtime.getRuntime().maxMemory()/1024);
final int cachesize = max/8;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
cache = new LruCache<>(max);
iv = (ImageView)findViewById(R.id.imageView1);
if(getIntent().getExtras()!= null){
this.url = getIntent().getStringArrayListExtra("msg");
if(getIntent().getExtras().containsKey(MainActivity.PHOTO)){
mode = getIntent().getStringExtra(MainActivity.PHOTO);
new Image(i,this).execute(url.get(i));//error null pointer exception
}
else if (getIntent().getExtras().containsKey(MainActivity.SLIDE)){
mode = getIntent().getStringExtra(MainActivity.SLIDE);
h.run();//error null pointer exception
}
}
}
Runnable h = new Runnable() {
@Override
public void run() {
i++;
if(i==url.size())
i=0;
new Image(0,PhotoActivity.this).execute(url.get(i));
handler.postDelayed(h, 2000);
}
};
@Override
public Context getContext() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getMode() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
boolean result = false;
try {
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > SWIPE_THRESHOLD
&& Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if(mode.equals(MainActivity.PHOTO))
return swipe.onTouchEvent(event);
else
return super.onTouchEvent(event);
}
private void onSwipeLeft() {
i--;
if (url!= null) {
if(i<0)
i = url.size()-1;
if (getDrawableFromMemCache(i) == null) {
new Image(i,this).execute(url.get(i));
}else
setPhotos(getDrawableFromMemCache(i));
}
}
private void onSwipeRight() {
// TODO Auto-generated method stub
i++;
if (url != null) {
if(i >url.size()-1)
i=0;
if (getDrawableFromMemCache(i) == null) {
new Image(i,this).execute(url.get(i));
}else
setPhotos(getDrawableFromMemCache(i));
}
}
private Bitmap getDrawableFromMemCache(int key) {
// TODO Auto-generated method stub
return cache.get(key);
}
public LruCache<Integer, Bitmap> getCache() {
return cache;
}
public void setCache(LruCache<Integer,Bitmap> cache) {
this.cache = cache;
}
@Override
public void addDrwabletoCache(Bitmap bm) {
// TODO Auto-generated method stub
if (getDrawableFromMemCache(i) == null) {
cache.put(i, bm);
}
}
@Override
public void setPhotos(Bitmap bm) {
// TODO Auto-generated method stub
iv.setImageBitmap(bm);
}
}
答案 0 :(得分:0)
getIntent().getStringArrayListExtra("msg");
似乎可能返回null,导致url
为空。