Utilisation de AsyncHttpResponseHandler

souadkhel Messages postés 19 Date d'inscription jeudi 12 mars 2015 Statut Membre Dernière intervention 8 juillet 2015 - 8 juil. 2015 à 16:56
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 9 juil. 2015 à 11:11
Bonjour,
j'utilise le code suivant mais je rencontre des erreurs
public void syncSQLiteMySQLDB(){
//Create AsycHttpClient object
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
ArrayList<HashMap<String, String>> userList = controller.getAllUsers();
if(userList.size()!=0){
if(controller.dbSyncCount() != 0){
prgDialog.show();
params.put("usersJSON", controller.composeJSONfromSQLite());
client.post("http://192.168.1.2/sqlitemysqlsync/insertuser.php",params ,new AsyncHttpResponseHandler() {

@Override
public void onSuccess(String response) {
System.out.println(response);
prgDialog.hide();
try {
JSONArray arr = new JSONArray(response);
System.out.println(arr.length());
for(int i=0; i<arr.length();i++){
JSONObject obj = (JSONObject)arr.get(i);
System.out.println(obj.get("id"));
System.out.println(obj.get("status"));
controller.updateSyncStatus(obj.get("id").toString(),obj.get("status").toString());
}
Toast.makeText(getApplicationContext(), "DB Sync completed!", Toast.LENGTH_LONG).show();
} catch (JSONException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}


@Override
public void onFailure(int statusCode, Throwable error,
String content) {
// TODO Auto-generated method stub
prgDialog.hide();
if(statusCode == 404){
Toast.makeText(getApplicationContext(), "Requested resource not found", Toast.LENGTH_LONG).show();
}else if(statusCode == 500){
Toast.makeText(getApplicationContext(), "Something went wrong at server end", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet]", Toast.LENGTH_LONG).show();
}
}

});
}else{
Toast.makeText(getApplicationContext(), "SQLite and Remote MySQL DBs are in Sync!", Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(getApplicationContext(), "No data in SQLite DB, please do enter User name to perform Sync action", Toast.LENGTH_LONG).show();
}
}

}

il m'àffiche une erreur concernant AsyncHttpResponseHandler, une erreur que je ne comprends pas puisque il me demande d'implémenter les méthodes OnSuccess et OnFailure!! alors qu'elles sont déjà présentes!

merci

1 réponse

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
9 juil. 2015 à 08:05
Salut,

Si tu utilses bien la classe AsyncHttpResponseHandler provenant de l'API loopj

Tu definis certe les méthodes onSuccess et onFailure mais visiblement d'apres la javadoc tu n'utilises pas les bons paramètres:

@Override
public void onSuccess(int statusCode, org.apache.http.Header[] headers, byte[] responseBody) {
}

@Override
public void onFailure(int statusCode, org.apache.http.Header[] headers, byte[] responseBody, java.lang.Throwable
 error) {
}



0
Bonjour et merci pour la réponse, j'ai déjà essayé d'utiliser les bons paramètres comme vous l'avez mentionné dans votre réponse mais j'ai toujours des erreurs.
Dans mon cas, je n'ai pas besoin de tous ces paramètres.
En faisant quelques recherches sur internet j'ai trouvé des cas similaires à mon projet et qui utilisaient les mêmes paramètres que j'ai utilisé dans ces deux méthodes (OnSuccess et OnFailure) dans mon projet.
voici le lien du projet en question :
http://programmerguru.com/android-tutorial/how-to-sync-sqlite-on-android-to-mysql-db/

j'ai essayé de le compiler mais je rencontre le même problème.

Merci de m'aider
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111 > souadkhel
9 juil. 2015 à 11:11
Salut,

Je comprends que tu ne veuilles pas utiliser tous les parametres, cela dit si la méthode est définie avec un certain nombre de parametres il faut 'obligatoirement' la déclarer avec... apres si tu ne les utilisent pas tous c'est autre chose.

En regardant sur le GitHub on peut voir que:
Si tu utilises une version <= 1.4.4:
Tu as à ta dispositions les méthodes suivantes:
public void onSuccess(String content)
public void onSuccess(int statusCode, Header[] headers, String content) 
public void onSuccess(int statusCode, String content)

Qui sont toutes deprecated et :
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody)

Qui n'est pas deprecated.
Idem pour les méthodes onFailure


Si tu utilises une version >= 1.4.4:
Il faut te conformer à mon premièr poste au niveau des parametres.
Dans cette version les méthodes deprecated n'existent plus et les méthodes onSuccess et onFailure sont passée en abstract (au même titre que la classe elle même)
0
Rejoignez-nous