Android Java事件侦听器出现问题

舞会:

我在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消失了。

这就像事件监听器稍后运行时一样。帮助我解决这个问题

cgb_pandey:

您可以等到将内容视图设置为初始化,并且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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章