У меня есть класс Asynctask с интерфейсом, который перезванивает другому классу, когда это будет сделано.Проблема в том, что, как только я вызвал asynctask, он повторяется каждые 5 секунд, основываясь на коде, установленном на onpostexecute, независимо от текущей активности.Проблема в том, что мне нужен доступ к интерфейсу на моей ТЕКУЩЕЙ ДЕЯТЕЛЬНОСТИ, а не к тому, который инициировал Asynctask.
Я пытаюсь создать контекстный контекст переменной и обновить его, чтобы он стал контекстом текущего действия (каждое действие имеет MainActivity.contexto = this;
в своем методе onCreate. Я хотел изменить обратный вызов в onpostexecute, чтобы он былтекущая активность, а не та, которая начала все, так что я могу получить доступ к выходу из интерфейса в этой активности.
Это то, что я пока имею в своей основной деятельности:
public class MainActivity extends AppCompatActivity implements ClimateAPI.OnDownloadComplete, DownloadArduino.OnArduinoDownloadComplete,LuzPopup.ExampleDialogListener {
public static Context contexto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
DownloadArduino downloadArduino = new DownloadArduino(MainActivity.this);
downloadArduino.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
public void onArduinoDownloadComplete(String temp, String humi, String lum, String light) {
Log.d(TAG, "onArduinoDownloadComplete: entrou ");
TextView textTempArd = (TextView) findViewById(R.id.textTempArd);
textTempArd.setText(temp+"°C" );
TextView textUmidArd = (TextView) findViewById(R.id.textUmidArd);
textUmidArd.setText(humi+ "%");
TextView textLumArd = (TextView) findViewById(R.id.textLumArd);
textLumArd.setText(lum);
if((DownloadArduino.lightstate==1) && (DownloadArduino.luminosity<300) && (contexto==this)) {
LuzPopup luzPopup = new LuzPopup();
luzPopup.show(getSupportFragmentManager(), "example dialog");
}
}
И это то, что у меня есть в моей AsyncTask:
public class DownloadArduino extends AsyncTask<String,Void,Void> {
private static final String TAG = "DownloadArduino";
public int internetAccess = 0; /*Variavel que checa acessibilidade da internet ( 0 = inacessivel, 1 = acessivel )*/
public static String umidade;
public static String temperatura;
public static String luminosidade;
public static int lightstate;
public static int luminosity;
public static String light;
public String result;
private final OnArduinoDownloadComplete mCallBack;
interface OnArduinoDownloadComplete{
void onArduinoDownloadComplete(String temp, String humi, String lum, String light);
}
public DownloadArduino(OnArduinoDownloadComplete callBack) {
Log.d(TAG, "DownloadArduino: callback e" + callBack);
mCallBack = callBack;
}
@Override
protected void onPostExecute(Void aVoid) {
Log.d(TAG, "onPostExecute: contexto e " + MainActivity.contexto);
if (internetAccess == 0 ){ /*Output para o caso de nao haver conexao desde o comeco do metodo*/
Toast.makeText(MainActivity.contexto, "Verifique a conexão", Toast.LENGTH_LONG).show(); /*Nao ha conexao*/
}
mCallBack.onArduinoDownloadComplete(temperatura,umidade,luminosidade,light);
if (MainActivity.logado) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
DownloadArduino downloadArduino = new DownloadArduino((OnArduinoDownloadComplete) MainActivity.contexto);
downloadArduino.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}, 5000);
}
}
Проблема в том, что я не могу применить CONTEXT к callBack, есть ли способ сделать это, так что действие, которое вызывается обратновсегда ТЕКУЩАЯ ДЕЯТЕЛЬНОСТЬ (не та, которая называла асинктаск)?