Can't get webhooks example to compile


I am trying to use the webhook example for reading the weather XML

I’m using the exact code from the example, but I get the following error when I try to compile:

weather.ino:74:16: converting to ‘String’ from initializer list would use explicit constructor ‘String::String(int, unsigned char)’

This error is caused by the last set of lines in the code where NULL is returned.

Any help is greatly appreciated. Here is the code:

// called once on startup
void setup() {
    // Begin serial communication

    // Listen for the webhook response, and call gotWeatherData()
    Particle.subscribe("hook-response/get_weather", gotWeatherData, MY_DEVICES);

    // Give ourselves 10 seconds before we actually start the
    // program.  This will open the serial monitor before
    // the program sends the request
    for(int i=0;i<10;i++) {
        Serial.println("waiting " + String(10-i) + " seconds before we publish");

void loop() {

    // Let's request the weather, but no more than once every 60
    // seconds.
    Serial.println("Requesting Weather!");

    // publish the event that will trigger our Webhook

    // and wait at least 60 seconds before doing it again

// This function will get called when weather data comes in
void gotWeatherData(const char *name, const char *data) {
    String str = String(data);
    String locationStr = tryExtractString(str, "<location>",
    String weatherStr = tryExtractString(str, "<weather>",
    String tempStr = tryExtractString(str, "<temp_f>", "</temp_f>");
    String windStr = tryExtractString(str, "<wind_string>",

    if (locationStr != NULL) {
        Serial.println("At location: " + locationStr);

    if (weatherStr != NULL) {
        Serial.println("The weather is: " + weatherStr);

    if (tempStr != NULL) {
        Serial.println("The temp is: " + tempStr + String(" *F"));

    if (windStr != NULL) {
        Serial.println("The wind is: " + windStr);

// Returns any text found between a start and end string inside 'str'
// example: startfooend  -> returns foo
String tryExtractString(String str, const char* start, const char* end)
    if (str == NULL) {
        return NULL;

    int idx = str.indexOf(start);
    if (idx < 0) {
        return NULL;

    int endIdx = str.indexOf(end);
    if (endIdx < 0) {
        return NULL;

    return str.substring(idx + strlen(start), endIdx);


the tryExtractString() function returns a String… but this return statement doesn’t match the String type, just returning a zero:

return NULL;


return String(NULL); 

but that is a strangely written function…