Возникла ошибка при представлении данных на платформу

Я получаю эту ошибку:

Message: exception 
Details: 'Cannot get property \'data\' on null object

Вот мой код:

import javax.xml.bind.DatatypeConverter;

import com.carriots.sdk.utils.BasicHttp;

def APIKEY = '1c7021dfcc02e4f52a8db39'

//// Data Fetching ////
def inc_data = context.data.data;
def d1 = inc_data[0..1];

//// Custom Rules declaration ////
def device_id = context.data.id;
def devicename = device_id + '23A2B@User.User';
def rssi = context.data.rssi;
def avgSnr = context.data.avgSnr;

def D1 = Long.parseLong(d1, 16)

//// Filter Status ////
if (D1 >= 1) {
    fltstatus = "motion detected";
} else {
    fltstatus = "No motion";
}

//// Payload ////
// Build Stream to persist.
// I think the error from the data variable but I do not why...
def data = '{"motion detection": "' + fltstatus + '"}'
def payload_data = '{"at": "now", "protocol": "v2", "device": "' + 
  devicename + '", "data": "' + data +'"}'

def basicHttp = new BasicHttp();
basicHttp.verb = "POST";
basicHttp.payload = payload_data;
basicHttp.url = "http://api.m.om/status/";
basicHttp.headers = [
    "Content-type": "application/json",
    "Accept": "application/json",
    "User-Agent": "Listener-Carriots",
    "carriots.apikey": APIKEY
]
basicHttp.send();

1 ответ

Ваше первое использование data как свойство это строка:

def inc_data = context.data.data;
                       ^    ^
                      (1)  (2)

Поскольку вы используете его дважды, невозможно узнать, какое использование вызывает исключение. Я рекомендую указывать точку останова, а затем использовать ваш отладчик, чтобы определить, что:

  • context не нуль
  • context.data не нуль
Другие вопросы по тегам