由于某种原因,我无法使用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");
答案 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对象引用的方法。