使用SAE的服务来实现android端的用户反馈功能。

这篇是上个月在SAE论坛上写的,现在也转过来吧。

因为应用的需要在SAE开了个jvm来帮android端合并一些请求,提供一些查询和抓取服务。但是SAE的jvm比较贵,每个小时都要5云豆,所以就打算搞点其他的功能,搭建一个简单的服务端,根据需要添加其他功能。

首先想到写个用户反馈的功能,这里需要先在SAE应用里建立一个MySQL数据库,具体创建可以参考SAE的文档

先是Android端提交数据的代码:


 1 public class UserMessage extends Activity implements OnClickListener {
2 private static final String TAG = UserMessage.class.getSimpleName();
3 private EditText tvText, tvMail;
4 @Override
5 protected void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.activity_gettext);
8 tvText = (EditText) findViewById(R.id.user_text);
9 tvMail = (EditText) findViewById(R.id.user_mail);
10 Button button = (Button) findViewById(R.id.user_bt);
11 button.setOnClickListener(this);
12 TextView userInfo = (TextView) findViewById(R.id.user_info);
13 userInfo.setText(getInfo());
14 }
15 // 获得机型、android版本、应用版本号
16 private String getInfo() {
17 PackageManager pManager = getPackageManager();
18 PackageInfo pInfo = null;
19 try {
20 pInfo = pManager.getPackageInfo(getPackageName(), 0);
21 } catch (NameNotFoundException e) {
22 Log.e(TAG, "包名不存在");
23 e.printStackTrace();
24 }
25 StringBuilder info = new StringBuilder();
26 info.append("机型:" + android.os.Build.MODEL);
27 info.append(" Android" + android.os.Build.VERSION.RELEASE);
28 info.append(" 软件版本:" + pInfo.versionName);
29 return info.toString();
30 }
31 @Override
32 public void onClick(View v) {
33 String text = tvText.getText().toString().trim();
34 String mail = tvMail.getText().toString().trim();
35 if (TextUtils.isEmpty(text)) {
36 Toast.makeText(UserMessage.this, "内容不能为空", Toast.LENGTH_SHORT).show();
37 } else {
38 new SendMessageTask().execute(new String[] { mail, text });
39 }
40 }
41 class SendMessageTask extends AsyncTask<String, Integer, String> {
42 protected String doInBackground(String... params) {
43 // 用POST方式提交
44 HttpPost httpRequest = new HttpPost("http://****.sinaapp.com/ReceiveMessage");
45 ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
46 list.add(new BasicNameValuePair("mail", params[0]));
47 list.add(new BasicNameValuePair("text", params[1]));
48 list.add(new BasicNameValuePair("info", getInfo()));
49 String result = "";
50 try {
51 httpRequest.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
52 HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
53 // 获取返回的状态码
54 if (httpResponse.getStatusLine().getStatusCode() == 200) {
55 // 获取返回的信息
56 result = EntityUtils.toString(httpResponse.getEntity());
57 } else {
58 result = "发送失败";
59 }
60 } catch (Exception e) {
61 e.printStackTrace();
62 return "发送失败";
63 }
64 return result;
65 }
66 protected void onPreExecute() {
67 Toast.makeText(UserMessage.this, "正在发送中", Toast.LENGTH_SHORT).show();
68 }
69 protected void onPostExecute(String result) {
70 Toast.makeText(UserMessage.this, result, Toast.LENGTH_SHORT).show();
71 }
72 }
73 }

下面是服务器端的代码:


 1 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2 request.setCharacterEncoding("UTF-8");
3 response.setContentType("text/html;charset=UTF-8");
4 String mail = request.getParameter("mail"); // 用户提交的联系方式
5 String text = request.getParameter("text"); // 用户反馈的正文
6 String info = request.getParameter("info"); // 机型、应用版本号等信息
7 String results = writeData(mail, text, info) ? "提交成功" : "提交失败";
8 response.getWriter().write(results); // 返回结果
9 }
10 public boolean writeData(String mail, String text, String info) {
11 String driver = "com.mysql.jdbc.Driver";
12 String dbUrl = "jdbc:mysql://r.rdc.sae.sina.com.cn:3307/app_name";
13 Connection connection = null;
14 PreparedStatement ps = null;
15 try {
16 Class.forName(driver);// 加载
17 // 连接数据库
18 connection = DriverManager.getConnection(dbUrl, SaeUserInfo.getAccessKey(), SaeUserInfo.getSecretKey());
19 // 获取当前的时间,一起写入数据库
20 String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
21 String sql = "insert into feedback (mail, text, time, info) values (?, ?, ?, ?)";
22 ps = connection.prepareStatement(sql);
23 ps.setString(1, mail);
24 ps.setString(2, text);
25 ps.setString(3, date);
26 ps.setString(4, info);
27 ps.execute();
28 return true;
29 } catch (SQLException e) {
30 e.printStackTrace();
31 return false;
32 } catch (ClassNotFoundException e) {
33 e.printStackTrace();
34 return false;
35 } finally {
36 try {
37 if (ps != null) {
38 ps.close();
39 }
40 if (connection != null) {
41 connection.close();
42 }
43 } catch (SQLException e) {
44 e.printStackTrace();
45 }
46 }
47 }

时间: 2024-07-28 19:09:04

使用SAE的服务来实现android端的用户反馈功能。的相关文章

android+json+php+mysql实现用户反馈功能

相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码,这里用到一个<include layout="@layout/uphead">就是把另外一个布局文件引入到这个布局中. <?xml version="1.0" encoding="utf-8"?> <LinearLayo

不想手动输入车牌号?手机Android端车牌识别助你一臂之力!

关键词:手机车牌识别 Android端车牌识别 移动端车牌识别 车牌识别 随着车辆的暴涨,对车辆的管理也是日益严峻.需要更多灵活的有效的管理方式,伴随着移动端APP的火爆应用,北京易泊时代将原来应用在电脑端的车牌识别技术转移到了手机Android端,手机Android端车牌识别更加灵活,方便,为人们的应用解决了很多实际困难. 手机Android端车牌识别产品描述 手机Android端车牌识别系统是北京易泊时代开发的基于移动平台的证件识别应用程序,支持Android/IOS等多种主流移动操作系统.

iOS:移动端“用户反馈和客服”的几个平台SDK的介绍

简单阐述: 用户反馈功能几乎是每个app都有的一个功能点,通过反馈功能实现与用户的连接.沟通,随时随地收集用户意见反馈和Bug报告,即时和用户保持沟通,在一定程度上提升了app的竞争力.而给app评分也是一个常见的功能.在目前的技术实现中,有那么几个平台SDK可供使用,分别是:网易七鱼.Bugtags.Instabug.微客服.环信客服.融云客服.阿里百川等. 平台SDK: 1.网易七鱼: 介绍: 无缝融合多渠道 在线客服.呼叫中心.客服机器人.工单系统,由表及里全面打造高效的客户服务体系. 文

linux[基础]-29-[Apache服务]-[个人用户主页功能]-[03]

Apache服务 top3:个人用户主页功能   开启个人用户主页功能: [[email protected] ~]# vim /etc/httpd/conf.d/userdir.conf 将第17行的UserDir disabled前面加一个#,代表改行注释 将第23行的UserDir public_html 前面的#去掉,表示启用   重启httpd服务: [[email protected] ~]# systemctl restart httpd.service 创建个人用户网站数据: 创

Android ListView分页加载(服务端+android端)Demo

Android ListView分页加载功能 在实际开发中经常用到,是每个开发者必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了测试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源代码: 服务端: 需要导入图中这几个jar包. 在运行Android端代码前,需要开启服务端: 下面先给出服务端的代码: 类EmpDataSource: package com.android

Android ListView分页载入(服务端+android端)Demo

Android ListView分页载入功能 在实际开发中经经常使用到,是每一个开发人员必须掌握的内容,本Demo给出了服务端+Android端的两者的代码,并成功通过了測试. 服务端使用MyEclipse,Android端使用Eclipse. 实现效果图: 服务端一共100条数据,共分四页,每页有25条数据. 源码: 服务端: 须要导入图中这几个jar包. 在执行Android端代码前,须要开启服务端: 以下先给出服务端的代码: 类EmpDataSource: package com.andr

用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM——Android端消息处理机制

NhmFramework Android端的消息处理机制原理 1.概要表述:在我们的框架中,Android客户端通过继承Application来控制整个应用程序的生命周期,在Application onCreate()方法中,我们将启动一个MainService,这个Service将负责Activity的异步消息处理(包括异步Http请求).任务调度.数据共享等大部分持久化操作.那么这样做的目的何在呢? 1)异步消息处理:在Service中实现异步消息处理是为了将Activity的界面显示的操作

使用SAE的Storage来为Android应用提供版本更新的检查和下载功能

因为Android的市场比较分散,有时候上传和审核都麻烦.为了让用户能第一时间获得更新,接下来要实现版本检查和下载功能.先在Storage里放入应用的APK.一个json的文档或者xml文件,因为我比较喜欢用json,所以接下来就用json文档.写json文档的时候记得不要用记事本,要用Notepad++之类的文本编辑器来写,然后保存成UTF-8无BOM的格式.不然android4.0以下版本解析会有问题.更新数据的格式:{      "version": 10,      "

Java服务器对外提供接口以及Android端向服务器请求数据

讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么请求服务器,接收以及解析返回数据的. 服务端:还是在原先S2SH框架的项目上(搭建SSH详细步骤及其相关说明),加入Servlet来做对终端提供接口的事情. Android端:用了一个网络访问框架okHttp,向服务器请求数据. 服务端: servlet接收移动端的get.post请求,进行相应逻辑处理后将要返回的数据封装成json格式写出去. 对数据库的操作传统的Servlet是用jdbc,但是操作过于繁琐,