首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Android 和 XML 构建动态用户界面(5)

使用 Android 和 XML 构建动态用户界面(5)

表示数据解析数据是一个非常机械的练习,将在本教程后面展示。在检查解析流程之前,应用程序需要某个位置来在内存中存储和管理这个元数据。出于这个目的,您拥有两个 Java 类,一个用于表单,一个用于表示表单字段。我们首先查看  中的 XmlGuiForm.java。
清单 2. XmlGuiForm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.msi.ibm;
import java.util.Vector;
import java.util.ListIterator;
import java.net.URLEncoder;

public class XmlGuiForm {

   private String formNumber;
   private String formName;
   private String submitTo;
   public Vector<XmlGuiFormField> fields;


   public XmlGuiForm()
   {
      this.fields = new Vector<XmlGuiFormField>();
      formNumber = "";
      formName = "";
      submitTo = "loopback"; // do nothing but display the results
   }
   // getters & setters
   public String getFormNumber() {
      return formNumber;
   }

   public void setFormNumber(String formNumber) {
      this.formNumber = formNumber;
   }


   public String getFormName() {
      return formName;
   }
   public void setFormName(String formName) {
      this.formName = formName;
   }

   public String getSubmitTo() {
      return submitTo;
   }

   public void setSubmitTo(String submitTo) {
      this.submitTo = submitTo;
   }

   public Vector<XmlGuiFormField> getFields() {
      return fields;
   }

   public void setFields(Vector<XmlGuiFormField> fields) {
      this.fields = fields;
   }

   public String toString()
   {
      StringBuilder sb = new StringBuilder();
      sb.append("XmlGuiForm:\n");
      sb.append("Form Number: " + this.formNumber + "\n");
      sb.append("Form Name: " + this.formName + "\n");
      sb.append("Submit To: " + this.submitTo + "\n");
      if (this.fields == null) return sb.toString();
      ListIterator<XmlGuiFormField> li = this.fields.listIterator();
      while (li.hasNext()) {
         sb.append(li.next().toString());
      }
   
      return sb.toString();
   }

   public String getFormattedResults()
   {
      StringBuilder sb = new StringBuilder();
      sb.append("Results:\n");
      if (this.fields == null) return sb.toString();
      ListIterator<XmlGuiFormField> li = this.fields.listIterator();
      while (li.hasNext()) {
         sb.append(li.next().getFormattedResult() + "\n");
      }

      return sb.toString();
   }

   public String getFormEncodedData()
   {
      try {
      int i = 0;
      StringBuilder sb = new StringBuilder();
      sb.append("Results:\n");
      if (this.fields == null) return sb.toString();
      ListIterator<XmlGuiFormField> li = this.fields.listIterator();
      while (li.hasNext()) {
         if (i != 0) sb.append("&");
         XmlGuiFormField thisField = li.next();
         sb.append(thisField.name + "=");
         String encstring = new String();
         URLEncoder.encode((String) thisField.getData(),encstring);
         sb.append(encstring);
      }

      return sb.toString();
      }
      catch (Exception e) {
         return "ErrorEncoding";
      }
   }
}




关于 XmlGuiForm 类,有几个重要项目需要注意:
  • 这里有 4 个成员变量:
    • formNumber:这是服务器端表单分发机制的惟一标识符。
    • formName:这是表单标题,向用户提供上下文和确认。
    • submitTo:这是应用程序提交输入的数据(经过验证)的 URL。这个值也可以是一个 loopback。在 loopback 场景中,数据显示给用户,而不是提交到服务器。这对测试比较有用。
    • fields:这是被模板化以持有表单的字段数据的 Vector 类。 展示了 XmlGuiFormField.java 的细节。
  • 一系列针对这些变量的 getters 和 setters。
  • toString() 和 getFormattedResults() 方法负责生成 XmlGuiForm 类的可读摘要。
  • getFormEncodedData() 方法在准备将数据提交到 submitTo 属性中指定的 URL 时使用。
  • 这个代码不使用严格连接的 java.lang.String 类,而是采用一个 StringBuilder 作为构建理想数据字符串的一个更内存高效的方法。
  • URLEncoder 类用于准备将数据提交到服务器。这使得数据实际上看起来就像一个传统 HTML 表单创建的一样。
  • 这个应用程序的一些潜在扩展包括:
    • 元数据本地存储或缓存使重复任务更快运行。
    • 本地存储在提交前一段时间内记录数据。
    • GPS 记录 — 使用位置数据标记每条记录。
返回列表