android客户端和struts框架使用json数据通信很方便。参考了网上的一些资料和博客

struts.xml文件一定要注意小心:今天因为粗心浪费了不少时间。。

<package name="struts2" extends="json-default" namespace="/">一定不要写成

<package name="struts2" extends="struts-default" namespace="/">android客户端得json数据。服务器端:

其中一个action配置如:

<action name="returnGroupList" class="flow.com.cn.action.GroupPurchaseAction" method="returnGroupPurchaseInfoList">
<result name="success" type="json">
</result>
</action>

服务器端其他的和一样,返回单个实体对象和实体列表没有区别。

json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回。

<result name="success" type="json">
只要为Action指定类型为json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回
<param name="includeProperties">
flowinfo\.id,flowinfo\.monthusedflow,flowinfo\.dayusedflow
</param>

<result>

服务器端接收android客户端传递过来的数据其中一个插入方法

public Boolean insertFeedbackInfo(FeedbackInfo feedback)throws Throwable{
// TODO Auto-generated method stub
String sql="insert into feedbackinfo(content,time)values('"+feedback.getContent()+"','"+feedback.getTime()+"')";
Connection conn=null;
PreparedStatement ps=null;
conn=(Connection) DBUtilsC3P0.getInstance().getConnection();
try {
ps=conn.prepareStatement(sql);
if(ps.execute())
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ps.close();
conn.close();
}

return false;
}

struts.xml中配置为:

<action name="insertFeedbackInfo" class="flow.com.cn.action.FeedbackInfoAction" method="insertFeedbackInfo">
<result name="success">/index.jsp</result>
</action>

android客户端:

@Override
public Boolean insertFeedbackInfo(String content,String time) {
//192.168.1.122:8089为本机IP地址,不能用localhost代替
String path = "http://192.168.1.122:8089/FlowServer/insertFeedbackInfo.action";
// http://192.168.1.122:8089/Strust2Json/csdn/listNewsGoods.action
Map<String,String> params = new HashMap<String,String>();
params.put("content", content);
params.put("time",time);
Boolean res=false;
try {
res=sendHttpClientPOSTRequest(path,params,"UTF-8");
System.out.println(res+"..............");
return res;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
return res;

}

httpclient请求方法

private boolean sendHttpClientPOSTRequest(String path,
Map<String, String> params, String encoding) throws Exception {
List<NameValuePair> pairs = new ArrayList<NameValuePair>();//存放请求参数

for(Map.Entry<String, String> entry:params.entrySet()){
pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs,encoding);
HttpPost httpPost = new HttpPost(path);
httpPost.setEntity(entity);
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(httpPost);
if(response.getStatusLine().getStatusCode()==200){
return true;
}
return false;
}

/**
* 发送post请求
* @param path 请求路径
* @param params 请求参数
* @param encoding 编码
* @return 请求是否成功
*/
private static boolean sendPOSTRequest(String path,
Map<String, String> params, String encoding) throws Exception{
StringBuilder data = new StringBuilder(path);
for(Map.Entry<String, String> entry:params.entrySet()){
data.append(entry.getKey()).append("=");
//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8
data.append(URLEncoder.encode(entry.getValue(),encoding));
data.append("&");
}

data.deleteCharAt(data.length() - 1);

byte[] entity = data.toString().getBytes();//得到实体数据
HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");

conn.setDoOutput(true);//设置为允许对外输出数据

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(entity.length));

OutputStream outStream = conn.getOutputStream();
outStream.write(entity);//写到缓存

if(conn.getResponseCode()==200){//只有取得服务器返回的http协议的任何一个属性时才能把请求发送出去
return true;
}

return false;
}

/**
* 发送GET请求
* @param path 请求路径
* @param params 请求参数
* @return 请求是否成功
* @throws Exception
*/
private static boolean sendGETRequest(String path,
Map<String, String> params,String encoding) throws Exception {
StringBuilder url = new StringBuilder(path);
url.append("?");
for(Map.Entry<String, String> entry:params.entrySet()){
url.append(entry.getKey()).append("=");
//get方式请求参数时对参数进行utf-8编码,URLEncoder
//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8
url.append(URLEncoder.encode(entry.getValue(), encoding));
url.append("&");
}
url.deleteCharAt(url.length()-1);
HttpURLConnection conn = (HttpURLConnection) new URL(url.toString()).openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if(conn.getResponseCode() == 200){
return true;
}
return false;
}

android客户端要导入gson.jar包。

更多相关文章

  1. Android Studio查看SQLite数据库方法大全
  2. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(四
  3. android客户端从服务器端获取json数据并解析的实现代码
  4. android bundle 在activity之间传递数据 点击一组图片放大,再次点
  5. 复制assets下的数据库到SD卡
  6. Android中WebView和JavaScript之间传递json格式数据
  7. Android使用WebView加载网页及数据
  8. 爱奇艺Android客户端软件开发实战(全套)

随机推荐

  1. 编译友善之背的mini210的android文件系统
  2. Android——控制UI界面
  3. 高斯模糊效果移植到android系统
  4. 使用 Android(安卓)Studio 进行测试 (二)
  5. AndroidWebView的使用
  6. Android官方入门文档[10]支持不同的屏幕
  7. Android问题总结
  8. 取消自动获得焦点和弹出对话框
  9. Android(安卓)AlertDialog去除白色边框
  10. 打电话和发短信程序