精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-25
首先在服务器端,我采用的是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的兴趣大大提升,它也没有我想象中的那么难~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-28
我也想好好学一下android
|
|
返回顶楼 | |
发表时间:2011-03-29
jantochen 写道 我也想好好学一下android
想学就抓紧时间~~其实只要基础好,应该不难学的,我以前学过一段时间的swing,感觉这上边的原理很多相差不大。。 |
|
返回顶楼 | |
发表时间:2011-03-29
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
|
|
返回顶楼 | |
发表时间:2011-03-29
seya 写道 发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。 不知道你说的压缩是怎么? |
|
返回顶楼 | |
发表时间:2011-03-29
Jclick 写道 seya 写道 发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。 不知道你说的压缩是怎么? 能说说具体是怎么压缩的吗 |
|
返回顶楼 | |
发表时间:2011-03-29
写的很好。在我看来。正在学习android。
|
|
返回顶楼 | |
发表时间:2011-03-30
写的很好,小弟最近做的一个Android的和楼主所使用的情况类同,服务器端也是ssh做的,数据的交互也是json 不懂之处还需多多指教
|
|
返回顶楼 | |
发表时间:2011-03-30
Swing不用配置XML这个的XML整的我受不了
|
|
返回顶楼 | |
发表时间:2011-03-30
zbasd 写道 Swing不用配置XML这个的XML整的我受不了
你也可以不用XML~~~不过确实,我用XML感觉也很不爽~~~! |
|
返回顶楼 | |