Dans mon projet pour Blackberry 4.5, je crée HttpConnection via Connector.open. Si je me connecte via MDS, je peux spécifier ConnectionTimeout dans des paramètres supplémentaires à mon URL. Comment puis-je spécifier des délais d'attente si j'utilise une connexion TCP directe ou TCP via WiFi?Timeout pour Blackberry HttpConnection
Répondre
Selon this KB article, il n'est pas possible de spécifier une valeur de délai de connexion pour les transports autres que MDS.
Dans certains cas, il est possible d'utiliser Http over Socket et SocketConnectionEnhanced avec READ_TIMEOUT Option:
public class HTTPSocketConnector
{
static public String getHtml(String url, long timeout)
{
String response = "";
try
{
String host = getHostUrl(url);
String page = getPageUrl(url);
SocketConnectionEnhanced hc =
(SocketConnectionEnhanced)Connector.open("socket://"
+ host + ":80");
hc.setSocketOptionEx(SocketConnectionEnhanced.READ_TIMEOUT,
timeout);
DataOutputStream dout = new DataOutputStream(
((SocketConnection)hc).openOutputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
String request = "GET /" + page + " HTTP/1.1\r\n" + "Host: "
+ host + ":80\r\n" + "User-Agent: MIDP2.0\r\n"
+ "Content-Type: text/html\r\n\r\n";
bos.write(request.getBytes());
dout.write(bos.toByteArray());
dout.flush();
dout.close();
InputStream is = ((SocketConnection)hc).openInputStream();
byte[] bytes = null;
bytes = IOUtilities.streamToBytes(is);
is.close();
response = new String(bytes, "UTF-8");
}
catch(Exception e)
{
response = e.getMessage();
}
return response;
}
private static String getPageUrl(String url)
{
String result = url;
if(result.indexOf("//") != -1)
{
result = result.substring(result.indexOf("//")
+ "//".length(), result.length());
}
if(result.indexOf("/") != -1)
{
result = result.substring(result.indexOf("/")
+ "/".length(), result.length());
}
return result;
}
private static String getHostUrl(String url)
{
String result = url;
if(result.indexOf("//") != -1)
{
result = result.substring(result.indexOf("//")
+ "//".length(), result.length());
}
if(result.indexOf("/") != -1)
{
result = result.substring(0, result.indexOf("/"));
}
return result;
}
}
Comme par document officiel
lors d'une connexion Transmission Control Protocol (TCP) à partir d'un smartphone BlackBerry, le délai de connexion par défaut est de 2 minutes. Cette valeur prend en compte le temps nécessaire à un smartphone BlackBerry pour accéder à l'envoi de données sur le réseau sans fil et pour que la connexion passe par le réseau sans fil via Internet vers le serveur de destination et vice-versa. Dans certaines circonstances, cette valeur est trop longue. Lors de la création d'une connexion socket ou HTTP (Hypertext Transfer Protocol) via le service de connexion BlackBerry® Mobile Data System (BlackBerry MDS), il est possible de définir une valeur inférieure à la valeur configurée dans BlackBerry MDS Connection Service . Par défaut, la valeur est 2 minutes. Il n'est pas possible de dépasser la limite configurée sur le serveur. Utilisez le paramètre ConnectionTimeout pour spécifier la valeur du délai d'expiration. Ce paramètre accepte une valeur numérique en millisecondes. Voici un exemple de connexion HTTP avec une valeur de délai d'attente de 1 minute:
StreamConnection s = (StreamConnection) Connector.open ("http://myserver.com/mypage.html;ConnectionTimeout=60000;deviceside=false"); HttpConnection httpConn = (HttpConnection) s;
Remarque: Le paramètre ConnectionTimeout n'est pas pris en charge par les connexions TCP directes ou les connexions via une passerelle WAP (Wireless Application Protocol). Seules les connexions TCP, effectuées via BlackBerry MDS Connection Service, prennent en charge ce paramètre.
S'il vous plaît voir le lien BB officiel
- 1. Blackberry Keyboard Lock timeout
- 2. Recherche de bibliothèques éprouvées pour Blackberry ou J2ME (HttpConnection)
- 3. HttpConnection package
- 4. readUTF timeout
- 5. J'ai une question à propos de httpConnection et getResponseCode sur BlackBerry
- 6. java.io.IOException: adresse DNS incorrecte - en ouvrant une connexion HttpConnection
- 7. Timeout GPS dans android
- 8. HttpClientParams timeout
- 9. Activator.CreateInstance timeout
- 10. Télécharger l'image en utilisant blackberry
- 11. asihttprequest timeout
- 12. Lucene pour Blackberry OS?
- 13. SDK pour BlackBerry
- 14. Simulateur pour BlackBerry 9300
- 15. Javascript bibliothèque pour BlackBerry
- 16. Application .NET pour BlackBerry?
- 17. Javascript timeout
- 18. Timeout XMLHttpRequest
- 19. $ (document) .ready() timeout pour les images
- 20. application BlackBerry incapable d'établir Http Connexion avec le serveur
- 21. BlackBerry java.io.IOException: Aucun tunnel à ouvrir
- 22. Raccourcir le délai de socket en utilisant Timeout :: timeout (n) ne semble pas fonctionner pour moi
- 23. Quelle est la différence entre Thread.Sleep (timeout) et ManualResetEvent.Wait (timeout)?
- 24. Application BlackBerry pour différents appareils
- 25. Application pour les débutants BlackBerry
- 26. Comment faire pour AppName() BlackBerry
- 27. Plugins pour Blackberry media player
- 28. Champ d'étiquette personnalisée pour BlackBerry
- 29. Contrôle HTML intégré pour Blackberry?
- 30. Création C# invite pour Blackberry
Oui, je le sais. Quelles solutions utilisez-vous pour résoudre ce problème? –
Vous pouvez définir une TimerTask à exécuter après un certain temps et vérifier si la connexion a été établie ou non. Si cela n'a pas été fait, abandonnez et continuez avec votre autre code (ou réessayez). –
Nous pouvons également utiliser deux threads: l'un avec la boucle pour le sous-thread en attente, et le sous-thread où nous essayons d'ouvrir la connexion (ou de lire les données ou smth else). –