Приложение Android вылетает без ошибок в коде - PullRequest
0 голосов
/ 16 апреля 2019

Код ниже - мое приложение, которое является таймером обратного отсчета. Всякий раз, когда я запускаю его на своем эмуляторе, происходит сбой без ошибок!Я также запустил приложение на реальном устройстве, но это также было неудачей.Я проверил манифест и любые другие вещи, которые могут быть причиной сбоев.Я надеюсь, что кто-то может мне помочь.

Вот код:

package com.example.taha.meditationcounter;

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {

    private CountDownTimer timer = null;
    public final TextView tv = (TextView)findViewById(R.id.textView);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final SeekBar sb = (SeekBar) findViewById(R.id.seekBar);

        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) { }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) { }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                restartTimer(sb);
            }
        });

        final Button bt_stop = (Button) findViewById(R.id.btn1);
        bt_stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(timer !=  null){
                    timer.cancel();
                }

            }
        });
    }

    private void restartTimer(SeekBar sb){
        if(timer !=  null){
            timer.cancel();
        }
        final long millis = TimeUnit.SECONDS.toMillis(sb.getProgress());
        final long interval =  TimeUnit.SECONDS.toMillis(1);

        timer = new CountDownTimer(millis, interval) {
            @Override
            public void onTick(long millisUntilFinished) {
                tv.setText(String.format("Seconds remaining: %d", TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)));

            }

            @Override
            public void onFinish() {
                tv.setText("DONE");
            }
        };timer.start();
    }
}

1 Ответ

4 голосов
/ 16 апреля 2019

Эта строка:

final TextView tv = (TextView)findViewById(R.id.textView);

Должен быть внутри onCreate(), (после super.onCreate(savedInstanceState) и setContentView(..)).

Я ожидаю, что в выводе LogCat будет какая-то форма трассировки

Изменить:

Вы можете объявить TextView tv за пределами onCreate(), если вы хотите получить к нему доступ в другом месте вашей деятельности, но вам нужно будет назначить его внутри onCreate(). Например:

private TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = (TextView)findViewById(R.id.textView);
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...