在本课中,您将向屏幕添加以下控件:
然后,您将添加代码以在文本字段中插入名称并刷新列表。
向屏幕中添加控件。
调用 getDataAccess 方法之前添加以下代码。
// Add an edit field for entering new names _nameEditField = new EditField( "Name: ", "", 50, EditField.USE_ALL_WIDTH ); add (_nameEditField ); // Add an ObjectListField for displaying a list of names _nameListField = new ObjectListField(); add( _nameListField ); // Add a menu item addMenuItem(_addToListMenuItem); // Create database and connect try{ _da = DataAccess.getDataAccess(); |
为 _nameEditField 和 _nameListField 添加类级别声明。同样,使用 run 方法定义 _addToListMenuItem MenuItem(目前为空)。这些声明位于 _statusLabel 和 _da 声明之后。
private EditField _nameEditField; private ObjectListField _nameListField; private MenuItem _addToListMenuItem = new MenuItem("Add", 1, 1){ public void run() { // TODO } }; |
重新编译应用程序并确认它可以运行。
向应用程序添加以下方法和对象:
添加将行插入表中的 DataAccess 方法:
public void insertName( String name ){ try{ Value nameID = _conn.createUUIDValue(); String sql = "INSERT INTO Names( ID, Name ) VALUES ( ?, ? )"; PreparedStatement ps = _conn.prepareStatement(sql); ps.set(1, nameID ); ps.set(2, name ); ps.execute(); _conn.commit(); } catch( ULjException uex ){ System.out.println( "ULjException: " + uex.toString() ); } catch( Exception ex ){ System.out.println( "Exception: " + ex.toString() ); } } |
添加保存 Names 表的行的类。toString 方法由 ObjectListField 控件使用。
package myapp; class NameRow { public NameRow( String nameID, String name ) { _nameID = nameID; _name = name; } public String getNameID(){ return _nameID; } public String getName(){ return _name; } public String toString(){ return _name; } private String _nameID; private String _name; } |
添加将表中的行读取到对象的矢量的 DataAccess 方法:
public Vector getNameVector(){ Vector nameVector = new Vector(); try{ String sql = "SELECT ID, Name FROM Names"; PreparedStatement ps = _conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while ( rs.next() ){ String nameID = rs.getString(1); String name = rs.getString(2); NameRow nr = new NameRow( nameID, name); nameVector.addElement(nr); } } catch( ULjException uex ){ System.out.println( "ULjException: " + uex.toString() ); } catch( Exception ex ){ System.out.println( "Exception: " + ex.toString() ); } finally{ return nameVector; } } |
将用户接口方法添加到 HomeScreen 类。以下是刷新名称列表的方法:
public void refreshNameList(){ //Clear the list _nameListField.setSize(0); //Refill from the list of names Vector nameVector = _da.getNameVector(); for( Enumeration e = nameVector.elements(); e.hasMoreElements(); ){ NameRow nr = ( NameRow )e.nextElement(); _nameListField.insert(0, nr); } } |
在 HomeScreen 构造函数结束之前调用 refreshNameList 方法,以便应用程序启动时列表已填充。
// Fill the ObjectListField this.refreshNameList(); |
添加用于将行添加到列表的 HomeScreen 方法:
private void onAddToList(){ _da.insertName(_nameEditField.getText()); this.refreshNameList(); _nameEditField.setText(""); } |
从 _addToListMenuItem MenuItem(当前为 //TODO)的 run 方法内调用此方法:
public void run() { onAddToList(); } |
编译并运行应用程序。
如果需要将模拟器重置为干净的状态,请从 BlackBerry JDE 的 [File] 菜单(而不是 [Simulator] 菜单)中选择 [Erase Simulator File],然后消除子菜单中的项。如果用此方法重置模拟器,则必须在再次运行应用程序之前重新导入 UltraLiteJ.cod 文件。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |