使用 Android 和 XML 构建动态用户界面(5)
 
- UID
- 1066743
|

使用 Android 和 XML 构建动态用户界面(5)
表示数据解析数据是一个非常机械的练习,将在本教程后面展示。在检查解析流程之前,应用程序需要某个位置来在内存中存储和管理这个元数据。出于这个目的,您拥有两个 Java 类,一个用于表单,一个用于表示表单字段。我们首先查看 中的 XmlGuiForm.java。
清单 2. XmlGuiForm.java1
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 记录 — 使用位置数据标记每条记录。
|
|
|
|
|
|