Я пытаюсь использовать AsyncTask в службе android, но это не сработало. Может кто-нибудь мне помочь? Я использую фрагменты, и я новичок. Заранее спасибо. Ошибка: невозможно разрешить метод. Вот моя реализация.Запуск AsyncTask в службе - Android
public class MyService extends Service implements Runnable {
final String numeroPorta = "80";
final String nomeParametro = "num";
String respostaServidor;
private boolean ativo;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startID) {
ativo = true;
new Thread(this, "MyService" + startID).start();
return super.onStartCommand(intent, flags, startID);
}
@Override
public void run() {
myService();
}
@Override
public void onDestroy() {
ativo = false;
}
public void myService() {
new Thread() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if (enderecoIP.length() > 0 && numeroPorta.length() > 0 && !Objects.equals(valorParametro, "0")) {
new HttpRequestAsyncTask(getApplicationContext(), valorParametro, enderecoIP, numeroPorta, nomeParametro).execute();
}
}
});
}
}.start();
}
public class HttpRequestAsyncTask extends AsyncTask<Void, Void, Void> {
private String requisicaoResposta, enderecoIP, numeroPorta;
private Context contexto;
private AlertDialog alerta;
private String parametro, valorParametro;
HttpRequestAsyncTask(Context contexto, String valorParametro, String enderecoIP, String numeroPorta, String parametro) {
this.contexto = contexto;
alerta = new AlertDialog.Builder(this.contexto)
.setTitle("Resposta HTTP:")
.setCancelable(true)
.create();
this.enderecoIP = enderecoIP;
this.numeroPorta = numeroPorta;
this.valorParametro = valorParametro;
this.parametro = parametro;
}
@Override
protected Void doInBackground(Void... voids) {
alerta.setMessage("Dados enviados, aguardando resposta do servidor...");
if (!alerta.isShowing()) {
alerta.show();
}
requisicaoResposta = sendRequest(valorParametro, enderecoIP, numeroPorta, parametro);
return null;
}
@Override
protected void onPostExecute(Void avoid) {
alerta.setMessage(requisicaoResposta);
if (!alerta.isShowing()) {
alerta.show();
}
}
@Override
protected void onPreExecute() {
alerta.setMessage("Enviando dados ao servidor, por favor aguarde...");
if (!alerta.isShowing()) {
alerta.show();
}
}
}
}
Вы пытаетесь вызвать 'runOnUiThread' в службе; этот метод доступен только в Activity. В этом случае, в рамках службы, вам даже не нужно будет использовать AsyncTask, просто используйте созданный вами поток, чтобы сделать свой запрос. – iainmcgin