#android
#Android
Вопрос:
Я использую ScheduledExecuterService
, который извлекает данные через вызов службы через интервал времени. Я пытаюсь обновить a TextView
с .setText()
помощью, чего не происходит. Текст изменяется при повторном открытии приложения, в противном случае оно не обновляется.
Код:
ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
Runnable task = new Runnable() {
public void run() {
AsyncTask asynctask = new AsyncTask() {
@SuppressLint("WrongThread")
@Override
protected Object doInBackground(Object[] objects) {
OkHttpClient client = new OkHttpClient();
// tv.setText("abc");
Request request = new Request.Builder().url(url_PATH3).build();
Response response = null;
try {
response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
return response;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
TextView DT = findViewById(R.id.DateTime);
TextView DI = findViewById(R.id.DeviceID);
TextView TP = findViewById(R.id.Temperature);
String[] AllDevices = o.toString().split(Pattern.quote("},{"));
String[] Dev1 = (AllDevices[0].split("":"|-|","));
String[] Dev2 = (AllDevices[1].split(","));
DI.setText(Dev1[1] "," Dev1[2]);
TP.setText(Dev1[4]);
DT.setText(Dev1[6]);
Log.d("test", "msg");
Dictionary Device1;
}
}.execute();
}
};
worker.schedule(task,5,TimeUnit.SECONDS);
}
Надеется на предложения или рекомендации
Ответ №1:
Вероятно, вам следует удалить @SuppressLint("WrongThread")
аннотацию, чтобы столкнуться с проблемой: вы запускаете AsyncTask
в другом потоке, который пытается обновить поток пользовательского интерфейса. Вложение этого AsyncTask
в a Runnable
также кажется странным. Самым простым было бы определить interface
, который можно использовать для обратного вызова, на onPostExecute()
… и позволить Activity
или Fragment
реализовать это interface
, что затем обновит TextView
поток пользовательского интерфейса.
Комментарии:
1. Я удаляю @SuppressLint(«WrongThread»), но проблема не решена. Не могли бы вы уточнить, как определить интерфейс для использования в качестве обратного вызова