一直是做.Net MVC开发的,结果有项目要求做android客户端,悲剧…… java基本等于0,只能折腾,近2个月终于完成
Android客户端 + Asp.net MVC3服务端主要问题就是通信.测试了N多,最后找到了个比较好用的jar包用做客户端数据提交:
android-async-http 官网和下载地址:http://loopj.com/android-async-http/
群里朋友给了很精准的描述:
Http请求均位于非UI线程,不会阻塞UI操作处理异步Http请求,并通过匿名内部类处理回调结果通过线程池处理并发请求处理文件上传、下载响应结果自动打包JSON格式自动处理连接断开时请求重连
闲话不说,上代码:
1 // 访问的url 2 String Url = "http://192.168.1.121/WebApp/Post"; 3 4 AsyncHttpClient client = new AsyncHttpClient(); 5 6 // 上传图片或者文件 7 File file = new File(Environment.getExternalStorageDirectory()+ "/temp.jpg"); 8 // 参数 9 RequestParams params = new RequestParams(); 10 params.put("userName", "admin"); 11 params.put("pwd", "123"); 12 try { 13 params.put("file", file); 14 } catch (FileNotFoundException e1) { 15 e1.printStackTrace(); 16 } 17 18 client.post(Main.this, Url, params, new JsonHttpResponseHandler() { 19 20 @Override 21 public void onStart() { 22 //此处添加程序开始时候的动作,如创建一个圆形进度条 23 } 24 25 @Override 26 public void onFinish() { 27 //此处添加程序完成后的代码,如进度条结束 28 } 29 30 @Override 31 public void onSuccess(JSONObject jsonObject) { 32 super.onSuccess(jsonObject); 33 try { 34 String status = jsonObject.getString("m"); 35 Log.e("msg", status); 36 } catch (JSONException e) { 37 // TODO Auto-generated catch block 38 e.printStackTrace(); 39 } 40 41 } 42 43 @Override 44 public void onFailure(Throwable e, String response) { 45 Log.e("msg", e + ""); 46 mypDialog.dismiss(); 47 } 48 49 });
服务端部分,我用的是Asp.Net MVC3
1 public JsonResult AttendancePost(string phoneId, string companyCode, string userId, string userName, string pwd, string AttendType, string lonLat) 2 { 3 try 4 { 5 6 #region 照片上传 7 8 var file = Request.Files["file"]; 9 if (file != null) 10 { 11 string relativePath = "/Upload/"; 12 string fileType = "jpg"; 13 string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + fileType; 14 string absolutePath = AppDomain.CurrentDomain.BaseDirectory + relativePath; 15 string fileFullPath = Path.Combine(absolutePath, fileName); 16 17 //自己编写上传的方法 18 UploadHelper.UploadFile(fileFullPath, file); 19 } 20 21 #endregion 22 23 return Json(new { m = "上传成功", s = "S" }, "text/plain", JsonRequestBehavior.AllowGet); 24 25 } 26 catch (Exception ex) 27 { 28 return Json(new { m = "上传失败", s = "S" }, "text/plain", JsonRequestBehavior.AllowGet); 29 } 30 31 32 }
基本上Android和MVC之间的通讯方式就是类似这样,客户端部分采用Get或者Post方式可以去官网查看,有比较完整的demo