Plz給出代碼或函數如何清除ListField並更新ListField。 假設我想在一個ListField中顯示一些從JSON對象中提取的多個文本(Project Name,Project Manager)。 我能夠在ListField中顯示這個字符串,但是我需要添加一個額外的功能即ie ..在ListField上方應該有一個ButtonField,並且當用戶單擊ButtonField時,ListField應該以基於項目的已排序方式顯示字符串名稱。所以我需要清除ListField關於Blackberry中的ListField
代碼NetworkingMainScreen是
package src1;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.system.*;
import org.json.me.JSONArray;
import org.json.me.JSONException;
import org.json.me.JSONObject;
import java.util.Vector;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.UiApplication;
class NetworkingMainScreen extends MainScreen
{
private EditField urlField;
private BitmapField imageOutputField;
private RichTextField textOutputField;
private ListField prjctlist_Field;
private Vector prjct_list_v = new Vector();
VerticalFieldManager vfm;
private String prjts;
public int total_prjcts;
JSONArray data_json_array;
JSONObject outer;
ListField myList;
private Vector v_prj_title;
private Vector v_prj_mgr;
private Vector send_vector;
private Vector send_vector3;
private Vector send_vector4;
private String t1,t2;
public JSONArray jsArrPrjts;
ListCallBack callback;
ButtonField sort;
NetworkingMainScreen()
{
// Screen2 s = new Screen2();
// UiApplication.getUiApplication.pushScreen(s);
setTitle("Networking");
urlField = new EditField("URL:", "http://iphone.openmetrics.com/apps/mattson/api.html?action=login&user=Nathan&password=coffee00&server=exp.lcgpence.com;deviceside=true");
textOutputField = new RichTextField();
imageOutputField = new BitmapField();
add(urlField);
add(new SeparatorField());
add(new LabelField("Text retrieved:"));
add(textOutputField);
myList = new ListField();
callback = new ListCallBack();
myList.setRowHeight(80);
myList.setCallback(callback);
add(myList);
}
protected void makeMenu(Menu menu, int instance)
{
super.makeMenu(menu, instance);
menu.add(new MenuItem("Get", 10, 10) {
public void run() {
getURL();
}
});
}
private void getURL()
{
HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(),"GET", this);
dispatcher.start();
}
public void requestSucceeded(byte[] result, String contentType)
{
if (contentType.startsWith("text/")) {
synchronized (UiApplication.getEventLock())
{
String strResult = new String(result);
try
{
JSONObject joPrjt = new JSONObject(strResult);
String res_code = joPrjt.optString("responseCode");
if(res_code.equals("1"))
{
data_json_array = new JSONArray();
data_json_array = joPrjt.optJSONArray("data");
int s = data_json_array.length();
v_prj_title = new Vector();
v_prj_mgr = new Vector();
outer = new JSONObject();
for(int i=0; i<s; i++)
{
//outer = new JSONObject();
outer = data_json_array.getJSONObject(i);
String job_no = outer.optString("job_number");
String contract_date = outer.optString("contract_date");
String project_title = outer.optString("project_title");
String project_manager = outer.optString("project_manager");
String created_date = outer.optString("created_date");
String project_name = outer.optString("project_name");
v_prj_title.addElement(project_title);
v_prj_mgr.addElement(project_manager);
}
UiApplication.getUiApplication().pushScreen(new Screen2(v_prj_title,v_prj_mgr,0,v_prj_title,v_prj_mgr));
}
else
{
Dialog.alert("Web page connected but not the requested page");
}
}
catch(JSONException e)
{
e.printStackTrace();
System.out.println("key not found catched " + e);
}
}
}
else
{
synchronized (UiApplication.getEventLock()) {
Dialog.alert("Unknown content type: " + contentType);
}
}
}
public void requestFailed(final String message)
{
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("Request failed. Reason: " + message);
}
});
}
}
代碼屏蔽2是
package src1;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import org.json.me.JSONArray;
import org.json.me.JSONException;
import org.json.me.JSONObject;
import java.util.Vector;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
class Screen2 extends MainScreen implements FieldChangeListener
{
JSONArray j_array;
JSONObject j_object;
CustomButtonField bf1;
Vector v_prj_title,v_prj_mgr,v_job_no,v_created_date,v_prj_name,send_vector;
Vector main_v_prj_title,main_v_prj_mgr;
String job_no,contract_date,project_title,project_manager,created_date,project_name;
VerticalFieldManager vfm;
ListField myList;
ListCallBack callback;
int pic_status;
int b;
String t1,t2;
String temp1,temp2,f1,f2;
// ListField prjctlist_Field;
Screen2(Vector v_prj_title2,Vector v_prj_mgr2,int pic_status,Vector main_v_prj_title_o2,Vector main_v_prj_mgr_o2)
{
this.main_v_prj_title = main_v_prj_title_o2;
this.main_v_prj_mgr = main_v_prj_mgr_o2;
this.v_prj_title = v_prj_title2;
this.v_prj_mgr = v_prj_mgr2;
this.pic_status = pic_status;
bf1 = new CustomButtonField("Name",pic_status,0);
bf1.setChangeListener(this);
vfm = new VerticalFieldManager();
vfm.add(bf1);
int s = v_prj_title.size();
myList = new ListField();
callback = new ListCallBack();
myList.setRowHeight(80);
myList.setCallback(callback);
for(int i=0;i<s;i++)
{
myList.insert(i);
t1 = v_prj_title.elementAt(i).toString();
send_vector = new Vector(2);
send_vector.addElement(t1);
t2 = v_prj_mgr.elementAt(i).toString();
send_vector.addElement(t2);
callback.insert(send_vector,i);
}
vfm.add(myList);
add(vfm);
}
public void fieldChanged(Field field, int context)
{
if(field == bf1)
{
if(pic_status == 0)
{
b =1;
int s = v_prj_title.size();
for(int i=0;i<s;i++)
{
for(int t=i+1;t<s;t++)
{
temp1 = (String)v_prj_title.elementAt(i);
temp2 = (String)v_prj_title.elementAt(t);
if(temp1.compareTo(temp2)>0)
{
//System.out.println("Comparision Executed :"+temp1 + " is greater than " + temp2);
f1 = (String)v_prj_mgr.elementAt(i);
f2 = (String)v_prj_mgr.elementAt(t);
v_prj_title.setElementAt(temp1,t);
v_prj_title.setElementAt(temp2,i);
v_prj_mgr.setElementAt(f1,t);
v_prj_mgr.setElementAt(f2,i);
}
}
}
UiApplication.getUiApplication().pushScreen(new Screen2(main_v_prj_title,main_v_prj_mgr,b,main_v_prj_title,main_v_prj_mgr));
}
if(pic_status == 1)
{
b=0;
UiApplication.getUiApplication().pushScreen(new Screen2(main_v_prj_title,main_v_prj_mgr,b,main_v_prj_title,main_v_prj_mgr));
}
}
}
}
一件事我需要clearify的是,在我上面的代碼首先我已經解析了NetworkingMainScreen中的JSON對象,如果JSON解析成功,我推送一個新的屏幕名稱Screen2,將存儲的Vector傳遞給Screen2。 Screen2執行ListField繪圖,或者我應該只在NetworkingMainScreen類中執行ListField繪圖。
For details about the items i need to display plz look **http://iphone.openmetrics.com/apps/mattson/api.html?action=login&user=Nathan&password=coffee00&server=exp.lcgpence.com&output=data**
我會回答這個問題,如果你提供了一個運行的例子,而不僅僅是2個屏幕... 順便說一句,你列出的URL的數據似乎是在Perl數據::自卸車格式,這是不是JSON。 –