Вы должны выйти из своего метода и отказаться от управления потоком пользовательского интерфейса, чтобы обновить ваши представления.Для этого вам, вероятно, следует использовать AsyncTask с его функцией обновления прогресса, чтобы не перегружать поток пользовательского интерфейса.
Что-то вроде:
public class MyTask extends AsyncTask<Void, String, Void> {
private final TextView progress;
public MyTask(TextView progress) {
this.progress = progress;
}
@Override
protected void onPreExecute() {
progress.setText("Starting...");
}
@Override
protected Void doInBackground(Void... unused) {
... your buffer code, including publishProgress(data); in your while loop ...
}
@Override
protected void onProgressUpdate(String... data) {
progress.setText(data[0]);
progress.invalidate(); // not sure if this is necessary or not
}
@Override
protected void onPostExecute(Void unused) {
progress.setText("Finished!");
}
}
Затем вы можете создать и выполнить AsyncTask, используя:
new MyTask(datatextview).execute();
Edit - убедитесь, что вы используете @Override
, который помогает предупредить вас, если сигнатуры вашего метода неверны.