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