android会合SSH搭建服务器客户端请求
android集合SSH搭建服务器客户端请求
小弟以前是学的J2EE,由于项目需要要开发android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
首先在服务器端,我采用的是SSH框架,struts2集合了json插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts2,所以我就用装了一个JSON插件,这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端~~以下是代码,欢迎拍砖~~
首先,在服务器端搭建好SSH框架,具体细节就不在陈述~struts xml配置如下:
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
然后是User实体类,主要用于保存用户信息:
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常爽~~同时对android的兴趣大大提升,它也没有我想象中的那么难~~~
想学就抓紧时间~~其实只要基础好,应该不难学的,我以前学过一段时间的swing,感觉这上边的原理很多相差不大。。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
能说说具体是怎么压缩的吗
你也可以不用XML~~~不过确实,我用XML感觉也很不爽~~~!
如果一次性去很大量的数据的话,本来就设计有缺陷。。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
用java中的Zip库方法压缩下, 变成短的字符串。
小弟以前是学的J2EE,由于项目需要要开发android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
首先在服务器端,我采用的是SSH框架,struts2集合了json插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts2,所以我就用装了一个JSON插件,这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端~~以下是代码,欢迎拍砖~~
首先,在服务器端搭建好SSH框架,具体细节就不在陈述~struts xml配置如下:
<package name="login" extends="json-default"> <action name="login" class="com.jclick.test.LoginAction" method="login"> <result type="json"><paramname="includeProperties">result</param></result> </action> </package>
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
package com.jclick.cache; import com.jclick.bean.User; public class Cache { private User User; private Cache(){ } /** 构造单例 */ private static class CacheHolder{ private static final Cache INSTANCE = new Cache(); } public Cache getInstance(){ return CacheHolder.INSTANCE; } public User getUser() { return User; } public void setUser(User User) { this.User = User; } }
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
package com.jclick.protocol; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; public class BaseProtocol { private StringBuilder sb = new StringBuilder(); private HttpClient httpClient; private HttpPost httpRequest; private HttpResponse response; private List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); BaseProtocol() { httpClient = new DefaultHttpClient(); } /** * 向服务器端发送请求 * * @param url * @throws Exception */ protected void pack(String url) throws Exception { httpClient = new DefaultHttpClient(); httpRequest = new HttpPost(url); httpRequest.setEntity(new UrlEncodedFormEntity(nameValuePair)); response = httpClient.execute(httpRequest); } /** * 得到返回数据 * * @param url * @return * @throws Exception */ protected void parse() throws Exception { // TODO 状态处理 500 200 if (response.getStatusLine().getStatusCode() == 200) { BufferedReader bufferedReader2 = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2 .readLine()) { sb.append(s); } } } /** * 向服务器发送信息 * * @param key * @param value */ public void addNameValuePair(String key, String value) { nameValuePair.add(new BasicNameValuePair(key, value)); } /** * 返回JSONObject对象数据模型 * * @return * @throws JSONException */ public JSONObject getJSON() throws JSONException { return new JSONObject(sb.toString()); } }
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
package com.jclick.protocol; import org.json.JSONObject; import com.jclick.bean.User; public class LoginProtocol extends BaseProtocol{ private final static String URL = "http://localhost:8080/test/login"; public boolean checkLogin(User usr){ try { pack(URL); parse(); JSONObject obj = this.getJSON(); if(obj.getString("result").equals("failed")){ return false; }else{ return true; } } catch (Exception e) { e.printStackTrace(); return false; } } }
然后是User实体类,主要用于保存用户信息:
package com.jclick.bean; public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
private void checkedData(){ username = ((EditText)findViewById(R.id.username)).getText().toString(); password = ((EditText)findViewById(R.id.password)).getText().toString(); User user = new User(); user.setUsername(username); user.setPassword(password); LoginProtocol login = new LoginProtocol(); boolean result = login.checkLogin(user); if(result){ SpiderCache.getInstance().setUserSession(user); Toast.makeText(getApplicationContext(), "登录成功", 1000).show(); Intent intent = new Intent (); intent.setClass(LoginActivity.this,WelcomeActivity.class); startActivity(intent); }else{ Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show(); } }
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常爽~~同时对android的兴趣大大提升,它也没有我想象中的那么难~~~
1 楼
jantochen
2011-03-28
我也想好好学一下android
2 楼
Jclick
2011-03-29
jantochen 写道
我也想好好学一下android
想学就抓紧时间~~其实只要基础好,应该不难学的,我以前学过一段时间的swing,感觉这上边的原理很多相差不大。。
3 楼
seya
2011-03-29
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
4 楼
Jclick
2011-03-29
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
5 楼
zah5897
2011-03-29
Jclick 写道
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
能说说具体是怎么压缩的吗
6 楼
bsq519
2011-03-29
写的很好。在我看来。正在学习android。
7 楼
wdq
2011-03-30
写的很好,小弟最近做的一个Android的和楼主所使用的情况类同,服务器端也是ssh做的,数据的交互也是json 不懂之处还需多多指教
8 楼
zbasd
2011-03-30
Swing不用配置XML这个的XML整的我受不了
9 楼
Jclick
2011-03-30
zbasd 写道
Swing不用配置XML这个的XML整的我受不了
你也可以不用XML~~~不过确实,我用XML感觉也很不爽~~~!
10 楼
Lemuel
2011-04-02
不错 正在学习android 可以借鉴一下
11 楼
setnewgod
2011-04-02
赞一个, 前几天还在想这块呢
12 楼
shengdong
2011-04-05
使用json作处理的时候发现一个问题,估计你也会遇上。提示一下,如果使用gson或者其他作json->object转换的时候,需要考虑内存的问题,我的尝试是超过1200个对象的数据作类型转换<List<Object>>会造成ooutofmemory,目前只能分步处理
13 楼
Jclick
2011-04-05
shengdong 写道
使用json作处理的时候发现一个问题,估计你也会遇上。提示一下,如果使用gson或者其他作json->object转换的时候,需要考虑内存的问题,我的尝试是超过1200个对象的数据作类型转换<List<Object>>会造成ooutofmemory,目前只能分步处理
如果一次性去很大量的数据的话,本来就设计有缺陷。。
14 楼
lwjshuai
2011-12-25
可以发一份源码给我学习下吗?最近公司在做这方面的应用,我对android还不是很熟悉,请求帮助一下,感谢。174416544@qq.com
15 楼
xiong_liang
2012-05-17
给否给发一份资料 网上的这样的资料太少了
非常感谢
非常感谢
16 楼
seya
2012-05-29
Jclick 写道
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
用java中的Zip库方法压缩下, 变成短的字符串。