您的位置:首页 > Web前端

安卓前端如何与.net后端通信(一)

2015-07-13 21:19 387 查看
今天在公司工作,由于项目人手不够,后端是使用.net开发的,然后一个写交换的哥们不知道如何下手。

刚开始,我也是狗吃王八无从下口。

回想一下以前做的开发,任何与后端的通信,无非就是找到后端的相应路径,然后加上对应的参数,就能完成对应的功能。

例如:

一、在浏览器中,用百度搜索123的结果。

如图:


从上面的图片中可以看到,web前端和后端的数据交互后的结果无非就是一段地址:

https://www.baidu.com/s?wd=123


从上面的地址中,我们可以看到,所谓的前端和后端通信,就是:网络地址+对应参数,百度这里就是new String("https://www.baidu.com/s?wd="+"123");后面的那个“123”就是所谓的变量,也就是我们想要百度搜索的内容,而通过浏览器浏览器把这个网络地址解析出来后,就是呈现在我们面前的内容。
同理,可得:我们安卓开发中,我们想和服务器通信,那么首先我们也需要知道服务器的地址,然后我们发起网络访问的请求,把我们想搞的东西写到参数中,传递给服务器,那么服务器只要有对应的方法来解析,我们就能达到预期的目标。

二、安卓客户端,往服务器传送图片。

首先,我们前面讲过了原理。那么我们明白,前端(安卓)要想往服务器传文件,服务器得有对应的方法来解决我们的文件接收,而且文件我们要作为数据先发过去。

let's go。

  首先,我不是怎么熟悉.net开发,那么怎么办?我们拿出我们java程序员最熟悉的,java服务层。具体解决框架,咱不用十分明白。但是我们要看到服务层确实对文件进行了保存的。代码,如下:

@RequestMapping("upload")
@ResponseBody
public String upload(Model model, MultipartHttpServletRequest request,
His his) {
String TMPname = new String(unicode2String(his.getUserName()));
MultipartFile file = request.getFile("file");
if (!file.isEmpty()) {
// 获得文件名:
String filename = file.getOriginalFilename();
String imgtype = filename.substring(filename.lastIndexOf("."));
String ctxPath = request.getSession().getServletContext()
.getRealPath("/")
+ "upload/";
File dirPath = new File(ctxPath);
System.err.println(dirPath.getAbsolutePath());
if (!dirPath.exists()) {
dirPath.mkdir();
}

File uploadFile = new File(ctxPath + UUID.randomUUID().toString()
+ imgtype);
his.setUserName(TMPname);
System.err.println(his.getUserName());
his.setPath(uploadFile.getName());
his.setType("签到");
try {
FileCopyUtils.copy(file.getBytes(), uploadFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
getHisServiceImpl().add(his);
}

return YGGLI_COMMON_PAGE;
}


上面就是服务端的图片接收源码,为什么不用文件上传的?毕竟手里有个现成的图片上传。

看完了后端,我们再来看看安卓前端,安卓前端为了减少代码量,我用了KJFRAME这个开源框架

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == NONE)
return;
// 拍照
if (requestCode == PHOTO_GRAPH) {
// 设置文件保存路径
File picture = new File(Environment.getExternalStorageDirectory()
+ "/temp.jpg");
KJHttp kjh = new KJHttp();
HttpParams params = new HttpParams();
System.err.println(App.currentUserName.toString() + "::::"
+ string2Unicode(App.currentUserName.toString()));
params.put("userId", App.currentUserId.toString());<span style="white-space:pre"> </span>//添加用户ID
params.put("userName",<span style="white-space:pre"> </span>//用户名
string2Unicode(App.currentUserName.toString()));
params.put("gps", gps);<span style="white-space:pre"> </span>//GPS信息
try {
params.put("file", picture);<span style="white-space:pre"> </span>//加入文件
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

kjh.post(App.url + "hisAction/upload.do", params,<span style="white-space:pre"> </span>//服务器提供的接口为<span style="font-family: Arial, Helvetica, sans-serif;">App.url + "hisAction/upload.do"</span>
<span style="white-space:pre"> </span><pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">//这就是前面说的服务器提供的文件保存的方法,也就是浏览器中的地址</span>//params是我们要传给服务器的参数new HttpCallBack() {@Overridepublic void onSuccess(String t) {super.onSuccess(t);ViewInject.toast("文件上传完成");Toast.makeText(CMainActivity.this, "上传签到记录成功!", 3).show();}@Overridepublic void onFailure(Throwable t, int errorNo,String
strMsg) {super.onFailure(t, errorNo, strMsg);ViewInject.toast("文件上传失败" + strMsg);}});}}

具体的东西就是上面这样了,但是更详细暂时没有那么的能力讲解的那么透彻,留待以后剖析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息