无法使用sync-android库从Cloudant NoSQL数据库读取传感器数据

时间:2016-11-30 13:40:31

标签: android ibm-cloud iot cloudant nosql

由于某种原因,我无法使用sync-android库通过IoT平台获取上传到Cloudant NoSQL DB的传感器数据。

请在下面找到代码,错误消息和发生错误的行:

try {
    uri = new URI("https://user:password@somehost.cloudant.com/database");
} catch (URISyntaxException e) {
    e.printStackTrace();
}
try {
    ds = manager.openDatastore("my_datastores");
} catch (DatastoreNotCreatedException e) {

            }
Replicator replicator = ReplicatorBuilder.pull().from(uri).to(ds).build();
Log.e("aaaaa",String.valueOf(replicator));
CountDownLatch latch = new CountDownLatch(1);
Listener listener = new Listener(latch);
Toast.makeText(MainActivity.this,String.valueOf(listener),Toast.LENGTH_LONG).show();
replicator.getEventBus().register(listener);
replicator.start();
try {
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}
replicator.getEventBus().unregister(listener);
if (replicator.getState() != Replicator.State.COMPLETE) {
    System.out.println("Error replicating FROM remote");
    System.out.println(listener.error);
}

错误:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.cloudant.sync.datastore.Datastore com.cloudant.sync.datastore.DatastoreManager.openDatastore(java.lang.String)' on a null object reference
                                                                                      at com.example.imb_bng_04.cloudserver.MainActivity.onCreate(MainActivity.java:42)

错误排队:    ds = manager.openDatastore(" my_datastores");

2 个答案:

答案 0 :(得分:1)

看起来你可能因为没有初始化一个对象而得到空指针。请参阅此S tack overflow post,它有类似的错误。

答案 1 :(得分:1)

Caused by: java.lang.NullPointerException:

某些东西是空的

Attempt to invoke virtual method
  'com.cloudant.sync.datastore.Datastore com.cloudant.sync.datastore.DatastoreManager
  ...openDatastore(java.lang.String)'
on a null object reference

所以null是你在

上调用openDatastore的对象
at com.example.imb_bng_04.cloudserver.MainActivity.onCreate(MainActivity.java:42)

在这一特定行:

ds = manager.openDatastore("my_datastores");

那么,这个对象引用是什么,我们称之为openDatastore,结果是null?

非常明显是manager。变量manager为null。你没有显示它来自哪里,所以没有人可以帮助告诉你为什么它是null,但你的修复包括弄清楚它,将它初始化为合理的东西,然后不调用null对象引用的方法。