基于JAVA的 Android客户端应用开发中的问题-------------服务器传值和客户端解析中的那些事儿

刚开始学习android开发,对于整个框架和android中的技术都还衰,所以在开发的时候各种问题;对于大多数的应用都会牵扯到后台服务器的交互问题--------服务器发送数据和客户端接收数据。本次开发虽然是4人合作完成,但是对于服务器端,我们则是每人都做了一份,后来使用了其中一人的代码。因为前期的服务端实属于一个web的B/S应用,我们在借用了那个服务端后,需要进行微小的修改才能使其与android客户端进行数据交互。而我在本次android的开发中,目前的工作则是主要负责客户端和服务器端得数据交互。

由于JAVA的水平太烂,所以我们写服务端的时候就单纯的使用了struts来做,对于android一样是没用什么技术,单纯使用json传送数据,不过我们借用了google的Gson jar包(因为确实好用多了)。这样以来,我们客户端和服务器的数据交互就显得有点繁琐。说了很多废话,下面说说实际的问题吧:

android客户端想服务器发送数据时,因为服务器使用struts,所以我们就和web上的数据发送一样,将客户端发送的数据以Map<String,String>的形式,只要确保Map的键很服务器端的数据名称一致就ok了。这样服务器就可以得到客户端的数据了,而服务器在对客户端的数据进行验证后还需要给客户端发送应答。这块本来是用struts可以直接将返回数据通过Json让客户端得到,但是这块没成功,所以就还是使用了原始的显式发送数据包的方式。而且单纯的JSON类好像不是很好用,测试几次都没成功,所以就放弃了。。。大神要是成功了求教呀!!

好了,代码如下:

服务器端:
Class UserInfo{private String userName;private Date birthday;private int height;//本来是想直接返回的,但是没成功代码就没改private Map<String,Object> res=new HashMap<String,Object>();各个属性的set和get方法;public String Validate(){String  flag=ERROR;result.clear();在这里各个属性就是客户端发送的数据,可以直接进行验证。if(成功)  res.put("res","success");else     res.put("res","error");//调用发送的工具类SendMessage.sendMsg(res);res.clear();return flag;}public String getAll_Data(){String flag=ERROR;//将发送的所有UserInfo的数据存入userInfoList。List<UserInfo> userInfoList=从数据库拿出数据;List<Object> jsonList=new ArrayList<Object>();    Gson gson=new GsonBuilder().setDateFormat().create();for(int i=0;i<userInfoList.size();i++)jsonList.add(gson.toJson(userInfoList.get(i)));res.put("res",jsonList);</span>SendMessage.sendMsg(res);res.clear();flag=SUCCESS;return flag;}}class final SendMessage{private final static void sendMsg(Object obj){JSONObject json=JSONObject.fromObject(obj);byte[] jsonMsg;try {jsonMsg = json.toString().getBytes("UTF-8");response=ServletActionContext.getResponse();response.setCharacterEncoding("UTF-8");response.setContentType("json/text;charSet=UTF-8");response.setContentLength(jsonMsg.length);response.getOutputStream().write(jsonMsg);response.getOutputStream().flush();response.getOutputStream().close();} catch (UnsupportedEncodingException e){e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
<pre name="code" class="java">android客户端:<span style="font-size:12px;">class  MainActivity{public void onCreate(){前面的什么各种加载界面就不说了,现在界面上有三个交互的数据框,在提交按钮的监听事件里做如下代码;<span style="color:#FF0000;">发送数据:</span>Map<String,String> param =new HashMap<String,String>();param.put("userName",第一个数据框的值);param.put("birthday",第二个数据框的值);
</span><pre name="code" class="java"><span style="font-size:12px;">    param.put("height",第三个数据框的值);//使用工具类发送数据给服务器并得到jsonGson gson=new GsonBuilder().setDateFormat().cretae();</span><span style="font-size:12px;">
</span><p><span style="font-size:12px;">String url1=HttpUtils.BASE_URL + 调用的服务端的strut中的action的name名字;</span></p><span style="font-size:12px;">
String json1=HttpUtil.postRequest(url1,param);
JSONObject js1=new JSONObject(new JSONObject(json1).getString("res"));
//客户端得到了服务器回发的验证信息String url2=HttpUtils.BASE_URL + 调用的服务端的strut中的action的name名字;<span style="color:#FF0000;">List<UserInfo> userList=new ArrayList<UserInfo>();
String json2=HttpUtil.getRequest(url2);
JSONObject js2=new JSONObject(json2);
JSONAraay jsonArray=js2.getJsonArray(“res”);
for(int i=0;i<jsonArray.length();i++){
UserInfo user=gson.fromJson(jsonArray.get(i).toString,UserInfo.class);
userList.add(user);
}</span>
//客户端就得到服务器发送的数据了
}工具类:
public class HttpUtils {
//服务端的urlpublic static String BASE_URL = "http://127.0.0.1:8080/ProductManagmentSystem/";public static HttpClient httpClient = new DefaultHttpClient();public static String getRquest(String url) throws ClientProtocolException,IOException {HttpGet get = new HttpGet(url);get.addHeader("Accept", "text/json");HttpResponse httpResponse = httpClient.execute(get);if (httpResponse.getStatusLine().getStatusCode() == 200) {HttpEntity httpEntity = httpResponse.getEntity();String json = EntityUtils.toString(httpEntity, "UTF-8");return json;}return null;}public static String postRequest(String url,Map<String, String> param) throws ClientProtocolException, IOException, URISyntaxException{HttpPost post = new HttpPost(url);post.addHeader("Accept", "text/json");List<NameValuePair> params = new ArrayList<NameValuePair>();for (String nameValuePair : param.keySet()) {params.add(new BasicNameValuePair(nameValuePair, param.get(nameValuePair)));}post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));HttpResponse httpResponse = httpClient.execute(post);if(httpResponse.getStatusLine().getStatusCode()==200){HttpEntity httpEntity = httpResponse.getEntity();String json = EntityUtils.toString(httpEntity, "UTF-8");return json;}return null;}
}</span>

对于整个过程中遇到的问题很多,主要有两个问题卡了我很长时间,第一个是发送数据时,刚开始直接用JSON,但是不成功,或许是我代码的问题,但是我使用了神器Gson;第二个问题是数据传送过程中,Date类型的传送;刚开始我以为数据传送完全就可以使用Gson不加修饰的发送和接受,但是客户端老是没法正常解析数据,因此我卡了好久,最后发现时Date类型传送和解析时要使用相同的格式才能完整的解析数据,否则可能在解析的时候就出错了!目前就遇到这么多问题,本人水水,求讨论,别喷呀!!!!

Java Android客户端开发相关推荐

  1. 第十章 进程间的通信 之 Java/Android多线程开发(二)

    文章目录 (一)Java 多线程开发 1.1)线程状态 1.2)线程控制方法 (1.2.1)Synchronized (1.2.2)Volatile (1.2.3)ReentrantLock 1.3) ...

  2. 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一)

    上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上篇文章中给大家简单介绍了一些业务,上门洗车APP --- Android客户端开发 前言及业务简介,本篇文章给大家介绍下 ...

  3. 行代码入门python_新浪微博Android客户端开发视频教程(36讲)

    教程名称:新浪微博Android客户端开发视频教程(36讲) 课程目录: [IT教程网]新浪微博Android客户端介绍 [IT教程网]新浪微博Android客户端相关资料 [IT教程网]新浪微博An ...

  4. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

  5. java 微博客户端,Java新浪微博客户端开发第二步

    上一篇:Java新浪微博客户端开发***步中有下图,这个access_token就是接下来要用到的. 关于access_token的有效时间: 更多关于access_token与Oauth2,请参看: ...

  6. Java新浪微博客户端开发第二步

    上一篇:Java新浪微博客户端开发第一步中有下图,这个access_token就是接下来要用到的. 关于access_token的有效时间: 授权级别 测试 普通 中级 高级 合作 授权有效期 1天 ...

  7. Java新浪微博客户端开发第四步

    这一步是对之前进行较大的改动.增加的类也比较多.包结构如下: 0.Main:主函数入口 1.MainDialog:主界面 2.WeiboPanel:StatusPanel及CommentPanel的父 ...

  8. Java新浪微博客户端开发第六步(完结开源)

    这次所达到的: 1.修复之前几个严重的Bug 1).查看别的用户的微博时,出现当前登录用户的微博 2).查看粉丝时,出现重复加载的情况. 3).查看微博评论.转发时,出现只有第一条点击的微博可以查看. ...

  9. Java新浪微博客户端开发第五步

    这次把基本的功能都实现了,也加上了授权那块.用户第一次使用该客户端时弹出授权的对话框.默认把授权获得的access_token保存下来,只要access_token不过期(通过审核的应用有效期是一个星 ...

  10. Java新浪微博客户端开发第三步

    实现:"下拉刷新"及提示语. 这次的包结构如下: 1.修改MyScrollPane,关键代码: verticalScrollBar. addAdjustmentListener ( ...

最新文章

  1. window与共享文件夹访问相关的四个服务
  2. bzoj3171: [Tjoi2013]循环格(费用流)
  3. Windows2003实用技巧
  4. CreateThread创建线程函数详细讲解
  5. Linux安装Java JDK:方式yum
  6. 数亿下载量的npm包被“投毒”,前端开源将如何?
  7. 解答:一个perl操作config.ini的出现的 cannot find file or dirctionary,可明明文件存在
  8. Linux Tomcat9 控制界面及管理配置
  9. Mysql学习——建表语句详解
  10. James+Javamail构建邮箱服务
  11. 在谷歌浏览器上加载翻译软件(金山词霸)
  12. 蓝桥试题 算法提高 Java分割项链
  13. android流光字体实现,CSS3自定义动画实现流光文字特效
  14. python后面空格报错_python空格报错
  15. PHP 魔术常量,__LINE__,__FILE__,__DIR__等等8个常用魔术常量
  16. 硬件设计——关于电路设计的一些知识
  17. 如何查看域控计算机是哪个用户登陆,查看域控制器上登录用户
  18. DaoCloud的使用
  19. 阿里云——手把手教你搭建个人网站(上云良心品,细致到想哭)
  20. 字节跳动前端用什么框架

热门文章

  1. 设置eclipse中的字体大小
  2. 这3分钟的习惯改变了我的生活
  3. jQuery鼠标悬停文字渐隐渐现动画效果
  4. 判断IE版本的HTML语句详解,如:!--[if IE 9] 仅IE9可识别 ![endif]--
  5. 《剑指offer》-中序遍历下一个节点
  6. React Native (一) 入门实践
  7. java robots协议检测工具
  8. ExtJS4.2学习(18)时间控件
  9. Python 绝对简明手册
  10. go学习笔记-运算符