Android firebase Onclick侦听器的嵌套不工作
我正在构建一个应用程序,其中一部分是向firebase提交一个设备id,如果提交了该设备id,它将上载一个虚拟类设备状态,该状态稍后将被更改并由NodeMCU使用。 但问题是,当我创建一个数据库引用并将设备id放在firebase上时,如果我尝试放置另一个addOnCompleteListener以推送虚拟设备状态类,就会出现一些错误 提交代码时提交代码和虚拟设备状态对象的My函数Android firebase Onclick侦听器的嵌套不工作,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在构建一个应用程序,其中一部分是向firebase提交一个设备id,如果提交了该设备id,它将上载一个虚拟类设备状态,该状态稍后将被更改并由NodeMCU使用。 但问题是,当我创建一个数据库引用并将设备id放在firebase上时,如果我尝试放置另一个addOnCompleteListener以推送虚拟设备状态类,就会出现一些错误 提交代码时提交代码和虚拟设备状态对象的My函数 void submitCode(String scannedCode){ code=sca
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 = 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));
}
}
});
}
}
}
);
}
第二次设置addOnCompleteListener时使用活动上下文
public class MainActivity extends AppCompatActivity {
private int toggle = 0;
DatabaseReference databaseReference;
Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
databaseReference = FirebaseDatabase.getInstance().getReference("DeviceStatus").child("");
}
void submitCode(String scannedCode){
String code = scannedCode;
databaseReference.setValue(code).addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseDatabase.getInstance().getReference("DeviceStatus").child("").setValue("").addOnCompleteListener(activity, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
});
}
}
由于对活动的引用存在一些混淆,我编写了一些示例代码,类似于您的一些变量被替换为just for Sample。请检查并随时询问进一步信息。databaseReference的数据类型是什么?@作为databaseReference的类型,我已更新了问题中的详细信息。请尝试更新FirebaseDatabase.getInstance.getReferenceDeviceStatus.childcode.setValuedeviceStatus.addOnCompleteListener此,使用FirebaseDatabase.getInstance.getReferenceDeviceStatus.childcode.setValuedeviceStatus.addOnCompleteListener mContext创建新的OnCompleteListener,新的OnCompleteListener使用活动的上下文或引用这里的mContext是什么,我在内部addOnCompleteListener中使用了BaseActivity的引用getApplicationContext.ge是什么?Oops!我在尝试别的东西。。我们已经更新了代码
public class MainActivity extends AppCompatActivity {
private int toggle = 0;
DatabaseReference databaseReference;
Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
databaseReference = FirebaseDatabase.getInstance().getReference("DeviceStatus").child("");
}
void submitCode(String scannedCode){
String code = scannedCode;
databaseReference.setValue(code).addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseDatabase.getInstance().getReference("DeviceStatus").child("").setValue("").addOnCompleteListener(activity, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
}
});
}
});
}
}