Android App with ASP.NET WebAPi Server - send complex types

旧时模样 提交于 2019-12-11 03:07:14

问题


I have a Android App which is via Web Services connected with my ASP.NET WebApi Server. For sending requests I am using AsyncHttpClient and for passing parameters to the server I use RequestParams. Now I want to send a complex object that contains a list with other complex objects to my server, and there is the issue. How am I supposed to do that? For simple types, it is pretty easy, since I just need to call parameter.add("paramname", paramvalue); multiple times on the same parameter name, and on the server side I receive a list. But what should the call look like when my list has complex types so that I receive a list on my server containing these complex types?

Let's say I have a book that contains a list of authors:

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

class Author {
    string name;
    int    age;
}

How should I pass a Book (including authors)to my server using Request params (let's assume the data class on the server looks the same)?

I've almost forgot that the server accepts JSON as format.

Thanks


回答1:


  1. First you need to declare the Book and Author (POJO) in your android project.
  2. Then you need to convert your complex objects to json object (you can either do it manually or with 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. Then you can use library like Google Volley to post your request to server:

    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. Finally add Action method for the request in your api controller

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

EDIT: for posting JSON via AsyncHttpClient use this:

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


来源:https://stackoverflow.com/questions/32852862/android-app-with-asp-net-webapi-server-send-complex-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!