Tu utilises mal l'AsyncTask. pour lancer une AsyncTask, il convient d'appeler la méthode execute(). Les méthodes onPreExecute, doInBackground et onPostExecute seront alors appelées automatiquement.
Il convient dans ta méthode doInBackground de traiter ton InputStream en tant que XML directement puis de renvoyer ce que tu veux afficher pour le binder sur l'interface graphique dans la méthode onPostExecute.
Ton code n'a pas vraiment de sens. Pourquoi instancier une activité dans ton onPostExecute. Tu devrais lire des exemples d'utilisation des AsyncTask sur internet. Il y a des tonnes d'exemples. Ca t'aidera.
le truc c'est que je les comprends pas les exemple j'ai passé la matinée à en regarder et je les comprends pas, je comprends pas comment faire ce que je veux faire en AssynckTask surtout celle sur le site d'android je la comprends pas, je sais pas quoi garder et quoi enlevé pour implémenter ce que je dois faire
Si tu n'arrives pas à comprendre un élément comme les AsyncTask malgré le nombre très important d'exemples sur internet, c'est peut-être que tu t'attaques à quelque chose de trop compliqué pour ton niveau.
Je ne peux que t'encourager à relire / reprendre les cours proposés sur OpenClassrooms.
surement oui mais il est souvent occupé du coups j'en profite pour poster une modification de mon code avec ce que j'ai compris de l'assyncTask (le cour sur openclassroom est plus facile à digérer que les exemple sur le net pour ma part)
j'ai fait ça
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import static android.R.attr.tag;
import static java.lang.System.in;
public class MainActivity extends Activity {
public MainActivity() throws IOException {
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
Connect connect = new Connect();
connect.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
public class Connect extends AsyncTask<Object, Object, ArrayList<String>> {
URL url = new URL("URL");
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
public Connect() throws IOException {
}
MainActivity mainActivity = new MainActivity();
@Override
protected void onPreExecute() {
}
@Override
protected ArrayList<String> doInBackground(Object... params) {
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("login", "password".toCharArray());
}
});
huc.setConnectTimeout(2000);
huc.setReadTimeout(2000);
huc.setRequestProperty("Accept", "application/xml");
huc.setRequestProperty("Content-Type", "application/xml");
try {
huc.connect();
} catch (IOException e) {
e.printStackTrace();
}
Log.d(String.valueOf(tag), "huc connecté");
String result = "";
//DataInputStream dis = new DataInputStream(); and dis.readLine is deprecated so I replace with BufferedReader br = new BufferedReader(new InputStreamReader(in)); with is the updated version.
BufferedReader br = new BufferedReader(new InputStreamReader(in));
huc.disconnect();
try {
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/*
* Etape 2 : création d'un parseur
*/
final DocumentBuilder builder = factory.newDocumentBuilder();
/*
* Etape 3 : création d'un Document
*/
final Document document = builder.parse(String.valueOf(br));
// regarder https://openclassrooms.com/courses/structurez-vos-donnees-avec-xml/dom-exemple-d-utilisation-en-java pour faire mon document XML
//Affiche du prologue
System.out.println("*************PROLOGUE************");
System.out.println("version : " + document.getXmlVersion());
System.out.println("encodage : " + document.getXmlEncoding());
System.out.println("standalone : " + document.getXmlStandalone());
/*
* Etape 4 : récupération de l'Element racine
*/
final Element racine = document.getDocumentElement();
//Affichage de l'élément racine
System.out.println("*************RACINE************");
System.out.println(racine.getNodeName());
/*
* Etape 5 : récupération des personnes
*/
final NodeList racineNoeuds = racine.getChildNodes();
final int nbRacineNoeuds = racineNoeuds.getLength();
for (int i = 0; i < nbRacineNoeuds; i++) {
if (racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) {
final Element device = (Element) racineNoeuds.item(i);
/*
* Etape 6 : récupération des données de la device
*/
final String DeviceId ="Id:"+ String.valueOf(device.getElementsByTagName("id").item(0));
final ArrayList<String> deviceInfo = new ArrayList<>();
deviceInfo.add(friendlyName);
return deviceInfo;
}
}
}catch (final ParserConfigurationException e) {
e.printStackTrace();
} catch (final SAXException e) {
e.printStackTrace();
} catch (final IOException e) {
e.printStackTrace();
}
finally {
return null;
}
}
@Override
protected void onPostExecute(ArrayList<String> deviceInfo) {
if (deviceInfo != null){
//Affichage d'une device
LinearLayout linearLayout = new LinearLayout(mainActivity);
setContentView(linearLayout);
linearLayout.setOrientation(LinearLayout.VERTICAL);
TextView Tv1 = new TextView(mainActivity);
linearLayout.addView(Tv1);
Tv1.setText("\n*************DEVICE************");
for(int c = 0; c < deviceInfo.size(); c++ )
{
TextView textView = new TextView(mainActivity);
textView.setText(deviceInfo.get(c));
linearLayout.addView(textView);
}
}
}
}
}
et ça ne fonctionne toujours et j'ai un 06-23 14:33:34.025 1341-1341/? E/adbd: failed to connect to socket 'localabstract:com.exemple.demoapp': Connection refused
J'espère enfin avoir compris comment on utilise l'assyncTask car c'est quelque-chose de très intéressant à mettre en place
oui j'ai réussi à trouvé un 06-23 14:33:34.025 1341-1341/? E/adbd: failed to connect to socket 'localabstract:com.exemple.demoapp': Connection refused t'as été plus rapide que moi j'ai modifié mon post en même temps que toi tu mettais ton post en ligne ^^'
alors l'url que j'appelle c'est une API se trouvant sur un serveur OVH donc oui elle est accessible à tout ceux qui ont les identifiants de connexion
Non fonctionnement d'une méthode
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog