我在android studio中制作了一个应用程序,它运行良好,但是在应用程序开始运行之前,它必须从Firebase实时数据库中检索数据。这需要花费几秒钟的时间,所以我决定放置另一个布局,该布局将作为开始屏幕显示,一旦数据加载,我们就会回到原始应用程序,因此我进行了这些更改
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.startscreen);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference brightn = database.getReference("INIT_DATA");
brightn.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
setContentView(R.layout.activity_main);
-display data-
.....
}
.......
如果我确实喜欢这个应用程序总是崩溃,并且如果我setContentView(R.layout.activity_main);
在事件侦听器结束后添加,则该应用程序无法兑现,但在第二个获得activity_main屏幕并几秒钟后显示数据之后,startscreen消失了。
这就像事件监听器稍后运行时一样。帮助我解决这个问题
您可以等到将内容视图设置为初始化,并且setOnClickListener()
在视图中像这样:
public class MainActivity extends AppCompatActivity {
// try to make these objects private
private Button buttonOFF;
private Button buttonON;
private SeekBar brightnessSlider;
private TextView brightnessDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loadlayout);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference brighten = database.getReference("LED_BRIGHTNESS");
brighten.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
int value = snapshot.getValue(Integer.class);
setContentView(R.layout.activity_main);
// initialize views only now after setting the layout
initViews();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Snackbar.make(getWindow().getDecorView(), "Error Occurred", Snackbar.LENGTH_LONG).show();
// here you need to set another view which shows some error has occurred.
}
});
}
// method to initialize and set onClickListener which will only be called after setting view
void initViews(){
brightnessSlider = findViewById(R.id.seekBar3);
brightnessDisplay = findViewById(R.id.textView3);
brightnessSlider.setProgress(value);
brightnessDisplay.setText(Integer.toString(value));
buttonOFF = findViewById(R.id.button);
buttonON = findViewById(R.id.button2);
brightnessSlider = findViewById(R.id.seekBar3);
brightnessDisplay = findViewById(R.id.textView3);
buttonOFF.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("LED_STATUS");//LED_STATUS is Firebase database LED_STATUS
myRef.setValue(0);
}
});
buttonON.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("LED_STATUS");//LED_STATUS is Firebase database LED_STATUS
myRef.setValue(1);
}
});
brightnessSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("LED_BRIGHTNESS");//LED_STATUS is Firebase database LED_STATUS
myRef.setValue(i);
brightnessDisplay.setText(String.valueOf(i));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
ImageView logo = findViewById(R.id.firebase);
// int fair = getResources().getIdentifier("@drawable/download", null, this.getPackageName());
// logo.setImageResource(fair);
// I guess we can easily set the drawable like this
logo.setImageDrawable(getDrawable(R.drawable.download));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句