2

Je reçois constamment des rapports d'erreur (des utilisateurs) tels que:Comment attraper Amazon erreurs AWS Android

Causée par: Code d'état: 400, service AWS: Amazon SimpleDB, AWS Demande ID: c5cb109d-bbff-fcea- bc0d-0cb60ff8f6af, AWS Code d'erreur: RequestExpired, AWS Message d'erreur: La requête a expiré. La date d'horodatage est 2012-06-06T13: 19: 59.415Z. La date actuelle est 2012-06-06T14: 20: 03Z

Apparemment, c'est parce que l'utilisateur n'a pas le bon fuseau horaire ou quelque chose de défini? Peu importe, je voudrais attraper cette erreur particulière et poster un message à l'utilisateur en leur demandant de vérifier leurs paramètres de fuseau horaire, mais je ne peux pas trouver un moyen de le faire. Si j'attrape AmazonServiceException, l'erreur apparaît comme nulle.

Comment puis-je détecter les erreurs en fonction du code d'état ou même du code d'erreur? Le code actuel que j'ai essayé ressemble à ceci:

try { 
     dostuff() 
    } catch (IOException e) { 
     updateAWS("DownloadErrors"); 
     return "filenotfound"; 
    } catch (AmazonServiceException e) { 
     return "downloadfail"; 
    } 

Cependant AmazonServiceException e est toujours nul, donc je ne peux pas tirer des informations de celui-ci.

autre code:

private void doStuff() throws IOException, AmazonServiceException{ 
//code here 
} 
+0

Vous pouvez ajouter la balise "simpledb". Aussi, une "Exception" régulière ne comprend pas cela? 'e.getMessage()' –

+0

Je ne suis pas sûr de ce que vous voulez dire. Pourriez-vous expliquer? – easycheese

+0

Vous utilisez des exceptions spécifiques, mais pas un type catchall d'exception, ajoutez '} catch (Exception e) {Log.e (" myapp ", e.getMessage()); } 'à la fin de votre capture. –

Répondre

0

Apparemment, ce que je avais besoin. SDb pistes "RequestExpired" et S3 utilise "RequestTimeTooSkewed"

En outre, cela semble se produire car l'heure système est différente de 15 minutes que le serveur AWS. Je mets une note à l'utilisateur pour vérifier son heure et utiliser la date/heure "automatique" si possible. Testé moi-même et reproduit l'erreur ainsi que la solution.

try { 
     result = doOperations(); 
    } catch (AmazonServiceException e) { 
     if (e.getErrorCode().equals("RequestExpired") || e.getErrorCode().equals("RequestTimeTooSkewed")) { 
      result = "timestamp"; 
     } 
     } 
    return result; 
}