从Android应用程序获取/发布数据到MVC3网站和viseverse

时间:2012-02-22 06:24:20

标签: android json asp.net-mvc-3 gson

我要开发一款我以前做过几次的Android应用程序,但现在的诀窍是我需要访问一个数据库(而不是设备中的sqllite)。我们之前已经建立了一个网站,拥有我需要的所有功能。所以我的想法是使用该网站(MVC3)从数据库获取信息,并从App发送信息到数据库。 你们有一些想法让我如何编码吗?我需要的是用Json或Gson从网站接收数据给我的猜测,然后我需要从App发布一些数据给控制器,不知道我是否需要使用url参数或者我是否可以使用Jsom那样的呢?

2 个答案:

答案 0 :(得分:1)

您可以使用JSON请求。 ASP.NET MVC 3有一个内置的JsonValueProvider,它允许将JSON请求反序列化为强类型视图模型。例如,假设您有以下模型:

public class MyViewModel
{
    public string Name { get; set; }
    public int Age { get; set; }
}

以及以下控制器操作:

[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
    ...
}

您可以向其发送以下POST请求:

POST /mycontroller/myaction
Content-Length: 22
Content-Type: application/json; charset=UTF-8
Host: www.example.com

{"name":"foo","age":5}

答案 1 :(得分:1)

在ASP.NET控制器中发送json对象,如: { “名称”: “foo” 的, “年龄”:5}

Controller的代码可能类似于:

[HttpPost]
public JsonResult MyAction(UserViewModel UserModel)
{
    /* do something with your usermodel object */
    UserModel.Name = "foo";
    UserModel.Age = 5;

    return Json(UserModel, JsonRequestBehavior.AllowGet);
}

编辑: 在Android方面,这里是发送请求并接收响应的方法:

public void GetDataFromServer() {

   ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
   nameValuePairs.add(new BasicNameValuePair("data_1", "data"));
   nameValuePairs.add(new BasicNameValuePair("data_n", "data"));
   try { 
   HttpPost httppost = new HttpPost("http://path_to_the_controller_on_server");
   String result = RetrieveDataFromHttpRequest(httppost,nameValuePairs); 
   // parse json data
   JSONObject jObjRoot = new JSONObject(result); 
   String objName = jObjRoot.getString("Name"); 
       String objName = jObjRoot.getString("Age"); 
    } catch (JSONException e) {
   Log.e(TAG, "Error parsing data " + e.toString()); 
    }  
}

private String RetrieveDataFromHttpRequest(HttpPost httppost, ArrayList<NameValuePair> nameValuePairs ) {

    StringBuilder sb = new StringBuilder();
    try {
        HttpClient httpclient = new DefaultHttpClient();
        if (nameValuePairs != null)
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();
        // convert response to string
        BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return  sb.toString(); 
}