AsyncTask onPreExecute progressdialog
J'ai un AsyncTask quand onPreExecute la fonction s'exécute, il me donne une exception
** java.lang.IllegalStateException: Vue
com.android.interne.politique.impl.PhoneWindow$DecorView@44ea0e20
a déjà été ajouté à la fenêtre
le gestionnaire.**
quand progressDialog de la méthode show() est appelée.
Mon Activité
public class TopNewsActivity extends ListActivity {
public static final String LOG_TAG = "Infra";
private ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listplaceholder);
new BackgroundAsyncTask().execute();
}
public class BackgroundAsyncTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(TopNewsActivity.this);
progressDialog.setCancelable(true);
progressDialog.setMessage("Loading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setProgress(0);
progressDialog.show();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(String... paths) {
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
String xml = XMLfunctions.getTopNewsXML();
Document doc = XMLfunctions.XMLfromString(xml);
int numResults = XMLfunctions.numResults(doc);
Log.d(LOG_TAG, "Number of Results: " + numResults);
if ((numResults <= 0)) {
Toast.makeText(TopNewsActivity.this, "No Result Found",Toast.LENGTH_LONG).show();
finish();
}
NodeList nodes = doc.getElementsByTagName("result");
for (int i = 0; i < nodes.getLength(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nodes.item(i);
map.put("id", XMLfunctions.getValue(e, "id"));
map.put("title", XMLfunctions.getValue(e, "title"));
mylist.add(map);
}
return mylist;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
ListAdapter adapter = new SimpleAdapter(TopNewsActivity.this, result, R.layout.list_item, new String[] { "title" }, new int[] { R.id.item_title });
setListAdapter(adapter);
progressDialog.dismiss();
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@SuppressWarnings("unchecked")
@Override
public void onItemClick(AdapterView<?> a, View view, final int position, long id) {
HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
Intent i = new Intent(TopNewsActivity.this, NewsDetails.class);
i.putExtra("content_id", o.get("id"));
i.putExtra("title", o.get("title"));
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
View v = TopNewsGroup.group.getLocalActivityManager().startActivity("ShowNews", i).getDecorView();
//Again, replace the view
TopNewsGroup.group.setContentView(v);
}
});
}
}
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
//TODO Auto-generated constructor stub
}
}
}
S'Il Vous Plaît Aider!!!!!
- montrer le code s'il vous plaît.
- Ivanov : avez ajouté le code s'il vous plaît avoir un coup d'oeil
Vous devez vous connecter pour publier un commentaire.
Il y a un problème habituel avec progressdialogs et les contextes, il m'arrive tout le temps et il y a une section sur l'android doc pour ce problème précis. Vous avez probablement déclarée avec un contexte de "ce" quand le contexte est effectivement le nom de votre classe Java, suivies par les ".cette".
C'est parce que vous voulez que le progressDialog à afficher dans la classe principale, et non pas dans l'Async classe.
Si ce n'est pas le résoudre, vous aurez besoin de poster le code.
Je crois que ce n'est pas une bonne chose à faire. Ne finissez pas votre activité à partir de la non thread d'interface utilisateur. Il suffit de retourner la valeur null.
Essayez de supprimer le
super.onPreExecute();
Merci tout le monde mais j'ai compris quel était le problème, je suis en utilisant ActivityGroup j'ai donc besoin de mettre progressDialog = new ProgressDialog(TopNewsGroup.groupe); cela a résolu mon problème
🙂
essayez d'utiliser ce code
Vous pouvez utiliser setProgressBaIndeterminateVisibility(vrai)