2

У меня есть приложение для Android, которое осуществляется через веб-службы, связанные с моим ASP.NET WebApi Server. Для отправки запросов я использую AsyncHttpClient и для передачи параметров на сервер использую RequestParams. Теперь я хочу отправить сложный объект, содержащий список с другими сложными объектами, на мой сервер, и есть проблема. Как я должен это делать? Для простых типов это довольно просто, так как мне просто нужно вызвать parameter.add("paramname", paramvalue); несколько раз с тем же именем параметра, и на стороне сервера я получаю список. Но как выглядит вызов, когда у моего списка есть сложные типы, чтобы получить список на моем сервере, содержащий эти сложные типы?Android-приложение с ASP.NET WebAPi Server - отправьте сложные типы

Скажем, у меня есть книга, которая содержит список авторов:

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

class Author { 
    string name; 
    int age; 
} 

Как я должен пройти книгу (включая авторов) к серверу с помощью запроса Params (допустим, класс данных на сервере выглядит тоже самое)?

Я почти забыл, что сервер принимает JSON в качестве формата.

Благодаря

ответ

1
  1. Сначала вы должны объявить книгу и Автор (POJO) в андроид проекта.
  2. Затем вам нужно преобразовать сложные объекты в объект JSON (вы можете сделать это вручную или с 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. Затем вы можете использовать библиотеку как Google Volley, чтобы получить возможность отправлять запрос на сервер:

    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. Наконец добавить метод действий для запроса в контроллере апи

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

EDIT: для размещения JSON через AsyncHttpClient использовать это:

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

Как я уже сказал, я использую AsyncHttpClient и Requestparams для добавления параметров запросов. Чтобы использовать ваше решение, мне пришлось бы переключать мою библиотеку. Мне интересно, можно ли добиться того же самого с моей библиотекой. – rimes

+0

Отредактировано решение для AsyncHttpClient JSON post –

+0

спасибо. Я проверю прямо сейчас – rimes