Je transfère certaines de mes applications Windows Phone 7 vers Android. Lorsque nous appelons des services dans le monde WP7, les appels sont asynchrones. Nous appelons le service et il y a un événement delegate _completed qui se déclenche quand le résultat est renvoyé. En attendant, nous continuons notre chemin.Comment appeler des services reposants dans Android
Le code Java java ci-dessous est la façon dont j'appelle un service HTTP sur mon serveur cloud. J'ai développé ce code en passant par des tutoriels Android qui enseignent comment appeler un service dans le monde android. Apparemment, les appels de service ici sont synchrones, donc l'instruction commençant par InputStream in ... n'est pas exécutée tant que le résultat n'est pas retourné.
Est-ce la façon dont il est censé fonctionner pour Android? Si le service ne répond pas, il y a une attente de quelques minutes et une exception de délai d'attente a lieu. Ce n'est pas bon. Tout va se bloquer.
Quelle est la manière recommandée d'appeler des services dans android? Merci, Gary
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HttpURLConnection urlConnection = null;
try
{
URL url = new URL("http://www.deanblakely.com/REST/api/products");
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
String myString = readStream(in);
String otherString = myString;
otherString = otherString + " ";
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
urlConnection.disconnect();
}
}
Je suis au courant de votre chapitre sur "Traiter avec des sujets". Je voulais juste m'assurer qu'il n'y avait pas quelque chose de spécialement construit dans l'API pour les appels de service dont je n'étais pas au courant (comme il y en a en C#). Merci. –
@ user1058647: Pas spécifiquement pour la mise en réseau. D'une manière générale, Android n'a pas beaucoup changé de réseau, en s'appuyant sur des éléments Java existants, dont la plupart ont adopté l'approche du bloc-arrière-plan. Il existe d'autres facettes de l'API Android qui utilisent le modèle async-operation-with-listener (par exemple, «MediaPlayer»). Et il peut y avoir des bibliothèques tierces qui vous donnent le modèle async-operation-with-listener pour les réseaux Java que vous pouvez utiliser sur Android, bien que je ne me souvienne pas du tout de ma tête. – CommonsWare
N'utilisez jamais AsynTask pour effectuer une requête réseau ou tout ce qui doit être conservé. Les tâches asynchrones sont fortement liées à votre activité et si l'utilisateur change l'orientation de l'écran depuis la création de l'application, la tâche asynchrone sera arrêtée. Je vous suggère d'utiliser le modèle de service avec Intent Service et ResultReceiver. Jetez un coup d'oeil à [RESTDroid] (https://github.com/PCreations/RESTDroid). C'est une bibliothèque qui vous permet d'effectuer n'importe quel type de requête REST de manière asynchrone et de notifier votre interface utilisateur avec les auditeurs de requêtes implémentant le modèle de service de Virgil Dobjanschi. – Pcriulan