Вы не можете получить доступ к объектам пользовательского интерфейса из другого потока, чем поток пользовательского интерфейса.Код:
nom.setText(param[1]+" "+ param[2]+" - "+param[3]);
вызовет исключение.
Вы можете получить доступ к элементам пользовательского интерфейса, когда находитесь в onPreExecute () или onPostExecute (Result).Доступ к элементам пользовательского интерфейса, пока вы находитесь в doInBackground, приведет к исключению.
Чтобы «исправить» это, вам нужно прочитать и понять реализацию AsyncTask
.Вместо объявления фоновой задачи с помощью AsyncTask<Void, Void, Void>
вы можете указать «тип результата», который можно опубликовать из метода doInBackground
в метод onPostExecute
(в потоке пользовательского интерфейса).AsyncTask<Void, Void, String>
(тип String
).
Вы должны сделать что-то вроде этого:
@Override
protected void onPostExecute(String result) {
if (result != null)
nom.setText(result);
// else show toast
}
@Override
protected String doInBackground(Void... params) {
try {
String[] param = new connectEco().recupereParam(tm.getDeviceId());
if (String.valueOf(param[4]) == String.valueOf(1))
return param[1]+" "+ param[2]+" - "+param[3];
} catch(Exception ex) {
// ignore and return null
}
return null;
}