2

J'ai une application Android qui est via les services Web connectés à mon serveur ASP.NET WebApi. Pour l'envoi de requêtes j'utilise AsyncHttpClient et pour passer des paramètres au serveur j'utilise RequestParams. Maintenant, je veux envoyer un objet complexe qui contient une liste avec d'autres objets complexes à mon serveur, et il y a le problème. Comment suis-je censé faire ça? Pour les types simples, c'est assez facile, car j'ai juste besoin d'appeler parameter.add("paramname", paramvalue); plusieurs fois sur le même nom de paramètre, et sur le côté serveur, je reçois une liste. Mais à quoi devrait ressembler l'appel quand ma liste a des types complexes pour que je reçoive une liste sur mon serveur contenant ces types complexes?Application Android avec ASP.NET WebAPi Server - envoyer des types complexes

Disons que j'ai un livre qui contient une liste des auteurs:

class Book { 
    string title; 
    int year; 
    List<Authors> authors; 
} 

class Author { 
    string name; 
    int age; 
} 

Comment dois-je passer un livre (y compris les auteurs) à mon serveur en utilisant la requête params (supposons que la classe de données sur l'apparence du serveur le même)? J'ai presque oublié que le serveur accepte JSON comme format.

Merci

Répondre

1
  1. D'abord, vous devez déclarer le livre et l'auteur (POJO) dans votre projet Android.
  2. Ensuite, vous devez convertir vos objets complexes à l'objet JSON (vous pouvez le faire manuellement ou avec GSON Libary)

    Gson gson = new Gson(); 
    String jsonString = gson.toJson(myBook); 
    JSONObject bookJsonObj = new JSONObject(); 
    
    try { 
        bookJsonObj = new JSONObject(jsonString); 
    } catch (JSONException e) { 
        e.printStackTrace(); 
    } 
    
  3. Ensuite, vous pouvez utiliser la bibliothèque comme Google Volley pour poster votre demande au serveur:

    JsonObjectRequest myJsonRequest = new JsonObjectRequest(Request.Method.POST, 
           ACTION_METHOD_URL, bookJsonObj , new Response.Listener<JSONObject>() { 
    
        @Override 
        public void onResponse(JSONObject jObj) { 
    
        } 
    }, new Response.ErrorListener() { 
    
        @Override 
        public void onErrorResponse(VolleyError error) { 
    
        } 
    }); 
    volleySingleton.addToRequestQueue(myJsonRequest, MY_REQUEST_TAG); 
    
  4. Enfin ajouter la méthode d'action pour la demande dans votre contrôleur api

    public IHttpActionResult YourActionMethod(Book book)  
    { 
        // do your request action here 
    } 
    

EDIT: pour l'affichage JSON via AsyncHttpClient utiliser:

StringEntity entity = new StringEntity(bookJsonObj.toString()); 
    client.post(context, ACTION_METHOD_URL, entity, "application/json", 
      responseHandler) 
+0

Comme je l'ai dit, je me sers AsyncHttpClient et Requestparams pour ajouter des paramètres aux demandes. Pour utiliser votre solution, je devrais changer de bibliothèque. Je me demande s'il est possible de faire la même chose avec ma bibliothèque. – rimes

+0

Edited ma réponse pour AsyncHttpClient JSON post –

+0

merci. Je vais vérifier maintenant – rimes