Usar apropiadamente AsyncTask get ()

Me estoy encontrando con un problema. Necesito usar asynctask para recuperar datos JSON y necesito esa información antes de pasar a la siguiente parte del progtwig. Sin embargo, cuando uso el método get () de AsyncTask, tengo una pantalla negra de 5 a 8 segundos antes de ver los datos que se muestran. Me gustaría mostrar un diálogo de progreso durante la recuperación de datos, pero no puedo hacerlo debido a la pantalla en negro. ¿Hay alguna manera de poner en otro hilo? aquí hay un código

AsyncTask

public class DataResponse extends AsyncTask { AdverData delegate; Data datas= new Data(); Reader reader; Context myContext; ProgressDialog dialog; String temp1; public DataResponse(Context appcontext) { myContext=appcontext; } @Override protected void onPreExecute() { dialog= new ProgressDialog(myContext); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setCancelable(false); dialog.setMessage("Retrieving..."); dialog.show(); }; @Override protected Data doInBackground(String... params) { temp1=params[0]; try { InputStream source = retrieveStream(temp1); reader = new InputStreamReader(source); } catch (Exception e) { e.printStackTrace(); } Gson gson= new Gson(); datas= gson.fromJson(reader, Data.class); return datas; } @Override protected void onPostExecute(Data data) { if(dialog.isShowing()) { dialog.dismiss(); } } private InputStream retrieveStream(String url) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(url); try { HttpResponse getResponse = client.execute(getRequest); final int statusCode = getResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url); return null; } HttpEntity getResponseEntity = getResponse.getEntity(); return getResponseEntity.getContent(); } catch (IOException e) { getRequest.abort(); Log.w(getClass().getSimpleName(), "Error for URL " + url, e); } return null; } 

}

DisplayInfo

 public class DisplayInfo extends Activity implements AdverData { public static Data data; public ProjectedData attup; public ProjectedData attdown; public ProjectedData sprintup; public ProjectedData sprintdown; public ProjectedData verizionup; public ProjectedData veriziondown; public ProjectedData tmobileup; public ProjectedData tmobiledown; public ProjectedAll transfer; private ProgressDialog dialog; public DataResponse dataR; Intent myIntent; // gets the previously created intent double x; // will return "x" double y; // will return "y" int spatial; // will return "spatial" //public static Context appContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); StrictMode.ThreadPolicy policy = new StrictMode. ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); dialog= new ProgressDialog(DisplayInfo.this); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setCancelable(false); dialog.setMessage("Retrieving..."); dialog.show(); myIntent= getIntent(); // gets the previously created intent x = myIntent.getDoubleExtra("x",0); // will return "x" y = myIntent.getDoubleExtra("y", 0); // will return "y" spatial= myIntent.getIntExtra("spatial", 0); // will return "spatial" String URL = "Some URL" dataR=new DataResponse().execute(attUp).get(); @Override public void onStart() {more code} 

Cuando usas get , usar Async Task no tiene ningún sentido. Porque get() bloqueará el subproceso UI, es por eso que se enfrentan de 3 a 5 segundos de pantalla en blanco como lo mencionaste anteriormente.

No use get() en su lugar use AsyncTask con Call Back check this AsyncTask con interfaz de callback