OkHttpClient
Fermé
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
-
10 avril 2017 à 19:02
BunoCS Messages postés 15491 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 septembre 2024 - 18 avril 2017 à 13:57
BunoCS Messages postés 15491 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 septembre 2024 - 18 avril 2017 à 13:57
5 réponses
BunoCS
Messages postés
15491
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 septembre 2024
3 907
Modifié le 11 avril 2017 à 11:08
Modifié le 11 avril 2017 à 11:08
De mon côté, j'utilise une classe static pour gérer mon client HTTP (attention code tronqué):
Edit: j'ai changé la visibilité de la méthode getHttpClient()
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, provide for a delay...
public class Server { private Server() { } private static Gson sGson; /** * Check if the application is connected to internet * * @return true if connected (mobile or wifi), false otherwise */ public static boolean hasConnectivity(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.isConnectedOrConnecting(); } public static boolean hasWifiConnectivity(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return activeNetwork != null && activeNetwork.getType() == ConnectivityManager.TYPE_WIFI; } public static OkHttpClient getHttpClient(boolean secured) { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS)); if (BuildConfig.DEBUG) { okHttpClientBuilder.addInterceptor(logging); } return okHttpClientBuilder.build(); } public static APIError parseError(Throwable e) { if (e instanceof HttpException) { HttpException httpException = (HttpException) e; return sGson.fromJson(httpException.response().errorBody().charStream(), APIError.class); } return null; } }
Edit: j'ai changé la visibilité de la méthode getHttpClient()
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, provide for a delay...
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
11 avril 2017 à 09:59
11 avril 2017 à 09:59
Ta classe est indépendante de l'activité principale ? Tu fais appel à elle depuis l'activité principale ou cette classe est intégrée dans l'activité principale ?
Et la création OU l'appel du OkHttpClient je la fais dans le code du bouton directement ?
Ou à l'extérieur du code du bouton en faisant une liaison ?
J'ai vu également qu'il était possible de créer un fichier de cache. Nécessaire ou pas ?
Et la création OU l'appel du OkHttpClient je la fais dans le code du bouton directement ?
/* Translation de "Index" vers "". */ @OnClick(R.id.indexActivity_boutonConnexion) public void indexActivity_boutonConnexion_clique() { ------- OkHttpClient ici ? ------- /* Création du lien "lien_Index_" entre les classes "Index" et "". */ Intent lien_Index_ = new Intent(Index.this, .class); /* Lancement de la translation. */ startActivity(lien_Index_); }
Ou à l'extérieur du code du bouton en faisant une liaison ?
------- OkHttpClient ici ? ------- /* Translation de "Index" vers "". */ @OnClick(R.id.indexActivity_boutonConnexion) public void indexActivity_boutonConnexion_clique() { /* Création du lien "lien_Index_" entre les classes "Index" et "". */ Intent lien_Index_ = new Intent(Index.this, .class); /* Lancement de la translation. */ startActivity(lien_Index_); }
J'ai vu également qu'il était possible de créer un fichier de cache. Nécessaire ou pas ?
BunoCS
Messages postés
15491
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 septembre 2024
3 907
11 avril 2017 à 11:06
11 avril 2017 à 11:06
Ma classe est indépendante, oui. Je peux l'appeler d'où je veux, c'est-à-dire où j'en ai besoin.
J'ai l'impression que tu te méprends sur une notion: l'appel de méthode d'une classe à partir d'une autre. Il n'est pas nécessaire de créer un Intent pour utiliser OkHttp. Un Intent sert à passer des passer des paramètres (ou un contexte de manière générale) d'une Activity à une autre. Rien ne t'empêche d'appeler les méthodes de ma classe Server (par exemple) dans le onClick:
Sauf que, de manière plus propre, je te conseille de te documenter sur le modèle MVC, Model View Controller, qui te permet de structurer ton code.
J'ai l'impression que tu te méprends sur une notion: l'appel de méthode d'une classe à partir d'une autre. Il n'est pas nécessaire de créer un Intent pour utiliser OkHttp. Un Intent sert à passer des passer des paramètres (ou un contexte de manière générale) d'une Activity à une autre. Rien ne t'empêche d'appeler les méthodes de ma classe Server (par exemple) dans le onClick:
@OnClick(R.id.indexActivity_boutonConnexion) public void indexActivity_boutonConnexion_clique() { OkHttp okClient = Server.getHttpClient(false); // ... }
Sauf que, de manière plus propre, je te conseille de te documenter sur le modèle MVC, Model View Controller, qui te permet de structurer ton code.
J'ai vu également qu'il était possible de créer un fichier de cache. Nécessaire ou pas ?A toi de voir si tu veux du cache. Pour du login, je ne suis pas sûr que cela soit utile...
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
Modifié le 17 avril 2017 à 10:55
Modifié le 17 avril 2017 à 10:55
Oui mais sachant que je veux que le client soit appelé lorsque l'utilisateur clique sur le bouton de connexion, il faut que j'appelle la méthode du client dans le OnClick, et de préférence hiérarchiquement après toutes les méthodes de vérification puisque je veux que le client ne soit utilisé QUE si toutes les vérifications ont été faites. Enfin si je ne dis pas de bêtise. Donc idéalement il faut que je crée mon client dans une classe séparée, et que j'appelle cette classe dans le OnClick, comme ceci :
////////////\\\\\\\\\\\\ //!\\ INTERACTIONS //!\\ ////////////\\\\\\\\\\\\ /* Implémentation des différentes ressources prédéclarées. */ final EditText pseudo = (EditText) indexActivity_blocPseudo_champs; final EditText motDePasse = (EditText) indexActivity_blocMotDePasse_champs; final EditText pseudoVerification = (EditText) indexActivity_blocVerificationPseudo_champs; final EditText motDePasseVerification = (EditText) indexActivity_blocVerificationMotDePasse_champs; final EditText eMail = (EditText) indexActivity_blocEmail_champs; final EditText eMailVerification = (EditText) indexActivity_blocVerificationEmail_champs; /* Translation de "Index" vers "". */ @OnClick(R.id.indexActivity_boutonInscription) public void indexActivity_boutonInscription_clique() { //... ---------- APPEL DU CLIENT ICI ? ---------- //!\\ Instructions de la translation. //!\\ /* Création du lien "lien_Index_" entre les classes "Index" et "". */ Intent lien_Index_ = new Intent(Index.this, .class); /* Lancement de la translation. */ startActivity(lien_Index_); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
17 avril 2017 à 11:15
17 avril 2017 à 11:15
Petite question en parallèle. Tu me conseilles de faire un client qui fait tout (vérification de l'existence des identifiants dans la bdd externe + écriture des identifiants dans la bdd externe si inexistants) ? Ou de faire un client pour chaque chose ? Genre j'appelle un client pour la vérification de l'existence des identifiants, puis s'ils n'existent pas, j'appelle juste derrière un autre client qui lui va écrire les nouveaux identifiants dans la bdd externe.
BunoCS
Messages postés
15491
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 septembre 2024
3 907
18 avril 2017 à 09:59
18 avril 2017 à 09:59
Un seul "client" (je n'aime pas cette terminologie) pour un type d'interaction. Celui-ci sera dédié aux échanges avec la BDD
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
BunoCS
Messages postés
15491
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 septembre 2024
18 avril 2017 à 11:33
18 avril 2017 à 11:33
Comment fais-tu pour appeler la méthode dans le OnClick ?
BunoCS
Messages postés
15491
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 septembre 2024
3 907
>
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
18 avril 2017 à 13:57
18 avril 2017 à 13:57
C'est de la programmation objet, hein! ;)
Tu crée ton objet (ici, un Singleton pour ton client) et tu appelles ses méthodes...
Tu crée ton objet (ici, un Singleton pour ton client) et tu appelles ses méthodes...