Ne peut pas accéder à “findViewById” dans AsyncTask
Je suis en utilisant une classe AsyncTask pour télécharger des données à partir d'un fichier php. Après le téléchargement, j'ai envie de mettre ces données, dans différents TextViews, mais je ne peux pas utiliser la méthode findViewById.
Le problème, c'est que je suis en train de faire cela en classes distinctes, et tout cela dans un fragment.
C'est mon code:
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{
private Context mContext;
[...]
public RecuperarComentarisFoto(Context context){
this.mContext=context;
}
@Override
protected void onPreExecute() {
[...]
}
@Override
protected String doInBackground(String... arg0) {
params.add(new BasicNameValuePair("pid", "1"));
JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params);
JSONArray productObj;
//HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK.
return null;
}
Et où j'ai le problème:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
this.pDialog.dismiss();
TextView comentariEditText = (TextView) findViewById(R.id.commentsMostrar);
}
J'ai essayé ceci:
TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar);
Mais ne fonctionne pas trop.
Remarque que je suis à l'appel de cette AsyncTask à partir d'un Fragment. Comme vous pouvez le voir, j'ai dû passer le contexte récupérées par getActivity() à l'AsyncTask:
public class MyFragmentA extends Fragment {
Context cont;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.fragment_a, container, false);
cont=getActivity();
new RecuperarComentarisFoto(cont).execute();
return myFragmentView;
}
}
Que dois-je faire?
Merci.
Publier vos LogCat
OriginalL'auteur Reinherd | 2013-01-04
Vous devez vous connecter pour publier un commentaire.
Passer votre roue de vue de l'AsyncTask comme ceci :
Ensuite appeler comme ça,
merci pour la réponse, je suis nouveau sur android.... donc, je vous remercie pour l'aide à la...
Super ! Elle fonctionne....
Ne pouvez-vous pas juste passer
Activity
et obtenirView
etContext
?Vous pouvez également passer à l'activité
OriginalL'auteur petey
essayer comme après le passage d'
MyFragmentA
contexte au lieu degetActivity()
:et changement
RecuperarComentarisFoto
commeOriginalL'auteur ρяσѕρєя K
Il suffit d'ajouter un paramètre supplémentaire à votre AsyncTask avec la vue myFragmentView et de trouver votre textview.
puis il suffit d'utiliser ce point de vue..
OriginalL'auteur Jens Mombaerts
Faire de votre AsyncTask indépendant de l'Activité
Que si
AsyncTask
est une salle de classe Java (en Dehors de l'Activité)et vous voulez continuer à accéder à l'Affichage d'éléments de toute
Activity
deAsyncTask
.AsyncTask
avec une autre Activité sanstout changement de code dans votre
AsyncTask
Réponse est. Utiliser une interface
Vous pouvez suivre ces étapes:
1) Créer une interface
2) l'Utilisation de l'écouteur dans votre AsyncTask
3) Implémenter l'interface de l'Activité et de Remplacer la méthode
Avenir
Vous n'aurez pas conscience de la beauté de votre code jusqu'à ce que vous avez à utiliser Votre AsyncTask dans une autre Activité.
Disons que dans l'avenir, vous souhaitez utiliser ce
AsyncTask
dans une Autre Activité qui montre les progrès dans un Spinner.Comment allez-vous utiliser ?
Simple! implémenter l'interface et de redéfinir la méthode.
OriginalL'auteur Rohit Singh
Vous pouvez faire votre
myFragmentView
mondiale, de cette façon, vous pouvez accéder à vos points de vue à partir de n'importe où, même à partir de votre fragment de méthodes commeonStart()
.OriginalL'auteur Tsar
Essayer cette
((Activity)context)
cela fonctionne pour moi...OriginalL'auteur Khalid Musa Sagar