Correctement à l'Aide d'AsyncTask get()

Je suis en cours d'exécution dans un problème. J'ai besoin d'utiliser asynctask pour récupérer les données JSON et j'ai besoin que les données avant de m'installer à la partie suivante du programme. Cependant, lors de l'utilisation de la méthode get() de AsyncTask j'ai 5 à 8 secondes d'écran noir avant de voir les données sont affichées. Je voudrais afficher une boîte de dialogue de progression lors de la récupération de données, mais je ne peux pas le faire à cause de l'écran noir. Est-il un moyen de les mettre dans un autre thread? voici un code

AsyncTask

public class DataResponse extends AsyncTask<String, Integer, Data> {
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}
Hmmm je ne vois pas une seule référence à l'AsyncTask dans votre code. Seule une mise en œuvre de doInBackground(). Par définition AsyncTasks fonctionnera en arrière-plan, s'il est correctement mis en œuvre et utilisé. Si votre programme doit attendre le résultat de l'AsyncTask puis afficher une boîte de dialogue lors de l'attente.
Est-il un code ou un lien, vous pouvez poster sur ce sujet. Je suis très intéressé à trouver.

OriginalL'auteur vaultzero | 2013-04-15