Collisions with tilemaps help

I am trying to make collisions on my map, i have a collisions layer and a layer for viewing but i dont really know how to do it, any help would be much appreciated.
(sorry for my messy code im still fairly new to java)


package JavaGame;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
import org.newdawn.slick.tiled.TiledMap;

public class Play extends BasicGameState{

   Animation player, movingUp, movingDown, movingLeft, movingRight, water;
   boolean quit = false;
   float playerX = 0;
   float playerY = 0;
   float shiftX = playerX + 428;
   float shiftY = playerY + 200;
   private TiledMap map/*, map2, map3*/;
   private boolean[][] blocked;
   private static final int SIZE = 16;


   public Play(int state){
   }

   public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{   
      map = new TiledMap(/*"res/Grass16x.tmx"*/"res/East10.tmx");
      //map2 = new TiledMap("res/Map.tmx");
      //map3 = new TiledMap("res/Area1.tmx");
      //worldGrass = new Image("res/GB.png");
      SpriteSheet sheet = new SpriteSheet("res/char.png",10,13);
      SpriteSheet waves = new SpriteSheet("res/wateranimation.png",16,16);

      water = new Animation(waves, 0, 0, 3, 0, true, 500, true);
      movingUp = new Animation(sheet, 8, 0, 11, 0, true, 100, false);
      movingDown = new Animation(sheet, 0, 0, 3, 0, true, 100, false);
      movingLeft = new Animation(sheet, 4, 0, 7, 0, true, 100, false);
      movingRight = new Animation(sheet, 12, 0, 15, 0, true, 100, false);
      player = movingDown;
      
      /*blocked = new boolean[map.getWidth()][map.getHeight()];
      for (int x=0;x<map.getWidth();x++) {
         for (int y=0;y<map.getHeight();y++) {
            int tileID = map.getTileId(x, y, 0);
            String value = map.getTileProperty(tileID, "blocked", "false");
            if ("true".equals(value)) {
               blocked[x][y] = true;
            }
         }
      }*/

        blocked = new boolean[map.getWidth()][map.getHeight()];
      for (int xAxis=0;xAxis<map.getWidth(); xAxis++)
        {
             for (int yAxis=0;yAxis<map.getHeight(); yAxis++)
             {
                 int tileID = map.getTileId(xAxis, yAxis, 0);
                 String value = map.getTileProperty(tileID, "blocked", "false");
                 if ("true".equals(value))
                 {
                     blocked[xAxis][yAxis] = true;
                 }
             }
         }
   }

   public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
      g.translate(shiftX,shiftY); 
      g.scale(2f, 2f);  
      g.translate(-shiftX, -shiftY); 
      
      map.render((int)playerX, (int)playerY);
      //map2.render((int)playerX + 864, (int)playerY);
      //map3.render((int)playerX + 864, (int)playerY - 480);
      /*water.draw(playerX, playerY);
      water.draw(playerX+16, playerY);
      water.draw(playerX, playerY+16);
      water.draw(playerX+16, playerY+16);*/
      player.draw(428, 200);
      g.drawString("Players X: "+ playerX+"\nPlayers Y: " + playerY, 0, 20);

      

      if(quit == true){
         g.drawString("Resume (R)", 250, 100);
         g.drawString("Main Menu (M)", 250, 150);
         g.drawString("Quit Game (Q)", 250, 200);
         if(quit==false){
            g.clear();
         }
      }
   }

   public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{
      Input input = gc.getInput();
      
      /*if(input.isKeyDown(Input.KEY_W)){
         player = movingUp;
         movingUp.update(delta);


         playerY += delta *1f;

         if(playerX <-421){
            if(playerY>705){
            playerY -= delta *1f;
            }
         } else if(playerY>220){
            playerY -= delta *1f;
            
         }
      }

      if(input.isKeyDown(Input.KEY_S)){
         player = movingDown;
         movingDown.update(delta);


         playerY -= delta *1f;

         if(playerY<-245){
            playerY += delta *1f;
         }
      }

      if(input.isKeyDown(Input.KEY_A)){
         player = movingLeft;
         movingLeft.update(delta);


         playerX += delta *1f;

         if(playerX>430){
            playerX -= delta *1f;
         }
      }

      if(input.isKeyDown(Input.KEY_D)){
         player = movingRight;
         movingRight.update(delta);


         playerX -= delta *1f;

         if(playerX<-1070){
            playerX += delta *1f;
            //sbg.enterState(2);
         }
      }


      if(input.isKeyDown(Input.KEY_ESCAPE)){
         quit = true;
      }


      if(quit == true){
         if(input.isKeyDown(Input.KEY_R)){
            quit = false;
         }
         if(input.isKeyDown(Input.KEY_M)){
            sbg.enterState(0);
         }
         if(input.isKeyDown(Input.KEY_Q)){
            System.exit(0);
         }
      }*/
      
      if (input.isKeyDown(Input.KEY_W))
        {
            player = movingUp;
            if (!isBlocked(playerX, playerY - delta * 0.1f))
            {
                movingUp.update(delta);
                // The lower the delta the slowest the sprite will animate.
                playerY += delta * 0.1f;
            }
        }
        else if (input.isKeyDown(Input.KEY_S))
        {
            player = movingDown;
            if (!isBlocked(playerX, playerY + SIZE + delta * 0.1f))
            {
                movingDown.update(delta);
                playerY -= delta * 0.1f;
            }
        }
        else if (input.isKeyDown(Input.KEY_A))
        {
            player = movingLeft;
            if (!isBlocked(playerX - delta * 0.1f, playerY))
            {
                movingLeft.update(delta);
                playerX += delta * 0.1f;
            }
        }
        else if (input.isKeyDown(Input.KEY_D))
        {
            player = movingRight;
            if (!isBlocked(playerX + SIZE + delta * 0.1f, playerY))
            {
                movingRight.update(delta);
                playerX -= delta * 0.1f;
            }
        }
   }
   
   private boolean isBlocked(float x, float y)
    {
        int xBlock = (int)x / SIZE;
        int yBlock = (int)y / SIZE;
        return blocked[xBlock][yBlock];
    }
   
   /*private boolean tryMove(float x, float y) {
      float newx = playerX + x;
      float newy = playerY + y;
      
      // first we try the real move, if that doesn't work
      // we try moving on just one of the axis (X and then Y) 
      // this allows us to slide against edges
      if (blocked(newx,newy)) {
         if (blocked(newx, playerY)) {
            if (blocked(playerX, newy)) {
               // can't move at all!
               return false;
            } else {
               playerY = newy;
               return true;
            }
         } else {
            playerX = newx;
            return true;
         }
      } else {
         playerX = newx;
         playerY = newy;
         return true;
      }
   }*/

   public int getID(){
      return 1;
   }
}

This is the error code i get:


Sun Jul 29 17:17:59 BST 2012 INFO:Slick Build #274
Sun Jul 29 17:18:00 BST 2012 INFO:LWJGL Version: 2.8.4
Sun Jul 29 17:18:00 BST 2012 INFO:OriginalDisplayMode: 1366 x 768 x 32 @60Hz
Sun Jul 29 17:18:00 BST 2012 INFO:TargetDisplayMode: 855 x 480 x 0 @0Hz
Sun Jul 29 17:18:00 BST 2012 INFO:Starting display 855x480
Sun Jul 29 17:18:00 BST 2012 INFO:Use Java PNG Loader = true
Sun Jul 29 17:18:00 BST 2012 INFO:Controllers not available
Sun Jul 29 17:18:07 BST 2012 ERROR:-1
java.lang.ArrayIndexOutOfBoundsException: -1
   at JavaGame.Play.isBlocked(Play.java:208)
   at JavaGame.Play.update(Play.java:178)
   at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:268)
   at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:657)
   at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
   at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
   at JavaGame.Game.main(Game.java:29)
Sun Jul 29 17:18:07 BST 2012 ERROR:Game.update() failure - check the game code.
org.newdawn.slick.SlickException: Game.update() failure - check the game code.
   at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:663)
   at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
   at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
   at JavaGame.Game.main(Game.java:29)

Seems obvious to me – code like this is resulting in a high enough delta to attempt to index negative offsets:


if (!isBlocked(playerX - delta * 0.1f, playerY))

And you’ll have a similar problem when you attempt to index past the end. If your map has a solid border all the way around, it’s as easy as having isBlocked return true if any index is out of bounds.

   float playerX = 0;
   float playerY = 0;

This value is never changed throughout the code D:
Try setting it to n*SIZE for a quick fix