【发布时间】:2019-06-19 03:49:33
【问题描述】:
我正在构建一个应用程序,其中一部分是将设备 id 提交到 firebase,如果提交了该设备 id,它将上传一个虚拟类设备状态,稍后将由 NodeMCU 更改和使用。 但问题是,当我创建一个数据库引用并将设备 ID 放在 firebase 上时,如果我尝试放置另一个 addOnCompleteListener 来推送虚拟设备状态类,则会出现一些错误。
提交代码时提交代码和虚拟设备状态对象的函数。
void submitCode(String scannedCode){
code=scannedCode;
databaseReference.setValue(code).addOnCompleteListener(
this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
DeviceStatus deviceStatus = new DeviceStatus();
deviceStatus.deviceID = code;
FirebaseDatabase.getInstance().getReference("DeviceStatus").child(code).setValue(deviceStatus).addOnCompleteListener(
this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> subTask) {
if (subTask.isSuccessful()) {
Toast.makeText(getApplicationContext(), "Product ID Successfully Entered", Toast.LENGTH_LONG).show();
finish();
startActivity(new Intent(getApplicationContext(), switchStatus.class));
}
}
}
);
}
}
}
);
}
这里的databaseReference是一个全局变量:
DatabaseReference databaseReference;
并初始化为
databaseReference = FirebaseDatabase.getInstance().getReference("DeviceStatus").child(devideID);
Android Studio 编辑器警告说:
Cannot resolve method 'addOnCompleteListener(anonymous com.google.android.gms.tasks.OnCompleteListener<java.lang.Void>, anonymous com.google.android.gms.tasks.OnCompleteListener<java.lang.Void>)'
构建错误提示
error: no suitable method found for addOnCompleteListener(<anonymous OnCompleteListener<Void>>,<anonymous OnCompleteListener<Void>>)
method Task.addOnCompleteListener(Executor,OnCompleteListener<Void>) is not applicable
(argument mismatch; <anonymous OnCompleteListener<Void>> cannot be converted to Executor)
method Task.addOnCompleteListener(Activity,OnCompleteListener<Void>) is not applicable
(argument mismatch; <anonymous OnCompleteListener<Void>> cannot be converted to Activity)
更新功能:
void submitCode(String scannedCode){
code=scannedCode;
databaseReference.setValue(code).addOnCompleteListener(
this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
// sendSwitchStatus(code);
DeviceStatus deviceStatus = new DeviceStatus();
deviceStatus.deviceID = code;
FirebaseDatabase.getInstance().getReference("DeviceStatus").child(code).setValue(deviceStatus).addOnCompleteListener( getBaseContext(), new OnCompleteListener<Void>(){
public void onComplete(@Nullable Task<void> subTask){
if (subTask.isSuccessful()) {
Toast.makeText(getApplicationContext(), "Product ID Successfully Registered", Toast.LENGTH_LONG).show();
finish();
startActivity(new Intent(getApplicationContext(), switchStatus.class));
}
}
});
}
}
}
);
}
【问题讨论】:
-
databaseReference的数据类型是什么? -
@Astha 它的类型为 DatabaseReference,我已经更新了问题中的详细信息。
-
尝试使用
FirebaseDatabase.getInstance().getReference("DeviceStatus").child(code).setValue(deviceStatus).addOnCompleteListener( mContext, new OnCompleteListener<Void>()更新FirebaseDatabase.getInstance().getReference("DeviceStatus").child(code).setValue(deviceStatus).addOnCompleteListener( this, new OnCompleteListener<Void>()(使用您的活动的上下文或引用) -
这里的 mContext 是什么??
-
就我而言,我在内部
addOnCompleteListener中使用了我的BaseActivity的引用
标签: android firebase firebase-realtime-database