Я довольно новичок в концепции asynctask, и у меня есть asynctask, которая получает мне json из API с параметром a then (postexecute) помещает содержимое в текстовые представления, которые будут отображаться (они устанавливаются видимыми после установки текста) дело в том, что я пытаюсь проверить, что json на самом деле не пуст, и с моим кодом я действительно делаю это, но если параметр, который я использую, является правильным, проверка все равно обнаруживает, что он пуст, если я пытаюсь получить его снова ( нажатием кнопки, которая запускает асинхронную задачу) после 2 или 3 попыток он действительно получит ее, я думаю, что это потому, что я делаю это на заднем плане, вот асинктическая задача
private class ConsultarDatos extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return "Unable to retrieve web page. URL may be invalid.";
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
JSONArray ja = null;
try {
ja = new JSONArray(result);
txtNombre.setText(ja.getString(0) +" " + ja.getString(1));
txtCategoria.setText(ja.getString(2));
txtDNI.setText(ja.getString(3));
txtEstado.setText(ja.getString(4));
//working=false;
} catch (JSONException e) {
e.printStackTrace();
}
}
}
и вот что я пытаюсь сделать
btnGenerar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ConsultarDatos().execute("https://api-adress/file.php?DNI=" + etDNI.getText().toString());
//while(working)
//{
//}
if (txtCategoria.getText()!="") {
btnGenerar.setVisibility(View.INVISIBLE);
etDNI.setVisibility(View.INVISIBLE);
txtCategoria.setVisibility(View.VISIBLE);
txtDNI.setVisibility(View.VISIBLE);
txtEstado.setVisibility(View.VISIBLE);
txtNombre.setVisibility(View.VISIBLE);
imgTarjeta.setVisibility(View.VISIBLE);
}
else
{
Toast.makeText(getApplicationContext(),"DNI Incorrecto",Toast.LENGTH_LONG).show();
}
}
});
Как я прокомментировал, я пытался сделать некоторое время, которое бы подождало, пока текстовые представления не будут полностью настроены, но это просто сломало мое приложение