这篇是上个月在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-10-17 05:43:07