Need Help communication Xbee

Hello Guys,
I am working on wireless project where i need to setup push button that can start the program on other micro controller wirelessly.

i am having problem communicating Xbee and arduino wireless. i am sending a serial data like 0 “LOW” or 1 “HIGH” using TX and RX of arduino connected to Xbee RX and TX respectively. But when i Retrieve serial data from receiving side that has second XBee connected with arduino its just print random number or -1.

Sending code

int switchPin = 4; // switch is connected to pin 2
int val; // variable for reading the pin status
int buttonState; // variable to hold the last button state

void setup() {
pinMode(switchPin, INPUT); // Set the switch pin as input

Serial.begin(9600); // Set up serial communication at 9600bps
buttonState = digitalRead(switchPin); // read the initial state
}

void loop(){
val = digitalRead(switchPin); // read input value and store it in val

if (val != buttonState) { // the button state has changed!
if (val == LOW) { // check if the button is pressed
Serial.println(val);
} else { // the button is -not- pressed…
}
}

buttonState = val; // save the new state in our variable
}

and receiving data

#include <NewSoftSerial.h>
NewSoftSerial mySerial(2,3);

//int incomingdata;

void setup()
{
Serial.begin(9600);
mySerial.begin(9600);

}

void loop()
{
incomingdata = mySerial.read();

Serial.println(incomingdata);
}

int switchPin = 4;              // switch is connected to pin 2

If the switch is connected to pin 2, why is switchPin set to 4?

Serial.println(val); will send '0' or '1' followed by a carriage return and line feed. Do you really want to send the carriage return and line feed, or should you be using Serial.print(), instead?

void loop()
{
  incomingdata = mySerial.read();

  Serial.println(incomingdata);
}

Is the XBee on the receiver really connected to pins 2 and 3? Don't you think it is necessary to determine if there is data be be read before reading it, and then assuming it is good, and sending it on? Use Serial.available() to determine how many bytes are available to be read. Only read when there is at least one.