开发运行环境:JDeveloper 11.1.2.4 + Android SDK r21.1
RESTDemo演示了如何使用REST风格的Web Service。
这里展示了两种使用方法:REST-XML和REST-JSON,去调用一个公共的Web Service:http://freegeoip.net/,获取当前机器的地理位置。
REST-XML使用了一个XSD,并创建了一个URL Service Data Control去访问结构化的数据,UI层直接绑定到这个DC上。
REST-JSON使用了一个帮助类:RESTServiceAdapter去获取Web Service的URL connection,然后使用帮助类:JSONSerializationHelper解析返回结果(非结构化的数据)。UI层是间接绑定到一个Managed Bean生成的DC。
1. RESTJSONBean.java 代码
package mobile;
import oracle.adfmf.dc.ws.rest.RestServiceAdapter;
import oracle.adfmf.framework.api.JSONBeanSerializationHelper;
import oracle.adfmf.framework.api.Model;
import oracle.adfmf.java.beans.PropertyChangeListener;
import oracle.adfmf.java.beans.PropertyChangeSupport;
public class RESTJSONBean {
private transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public RESTJSONBean() {
}
private String searchIp = "oracle.com";
private String jsonResponse = "";
private RESTJSONResponse response = null;
public void setSearchIp(String searchIp) {
String oldSearchIp = this.searchIp;
this.searchIp = searchIp;
propertyChangeSupport.firePropertyChange("searchIp", oldSearchIp, searchIp);
}
public void addPropertyChangeListener(PropertyChangeListener l) {
propertyChangeSupport.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
propertyChangeSupport.removePropertyChangeListener(l);
}
public String getSearchIp() {
return searchIp;
}
public void setJsonResponse(String response) {
String oldResponse = this.jsonResponse;
this.jsonResponse = response;
propertyChangeSupport.firePropertyChange("jsonResponse", oldResponse, response);
}
public String getJsonResponse() {
return jsonResponse;
}
public void setResponse(RESTJSONResponse response) {
RESTJSONResponse oldResponse = this.response;
this.response = response;
propertyChangeSupport.firePropertyChange("response", oldResponse, response);
}
public RESTJSONResponse getResponse() {
return response;
}
public void loadData() {
RestServiceAdapter restServiceAdapter = Model.createRestServiceAdapter();
// Clear any previously set request properties, if any
restServiceAdapter.clearRequestProperties();
// Set the connection name
restServiceAdapter.setConnectionName("GeoIP");
// Specify the type of request
restServiceAdapter.setRequestType(RestServiceAdapter.REQUEST_TYPE_GET);
// Specify the number of retries
restServiceAdapter.setRetryLimit(0);
// Set the URI which is defined after the endpoint in the connections.xml.
// The request is the endpoint + the URI being set
restServiceAdapter.setRequestURI("/json/" + getSearchIp());
setJsonResponse("");
// Execute SEND and RECEIVE operation
try {
// For GET request, there is no payload
setJsonResponse(restServiceAdapter.send(""));
// Now create a new RESTJSONResponse object and parse the JSON string returned into this class
RESTJSONResponse res = new RESTJSONResponse();
res = (RESTJSONResponse)JSONBeanSerializationHelper.fromJSON(RESTJSONResponse.class, getJsonResponse());
setResponse(res);
} catch (Exception e) {
e.printStackTrace();
}
}
}
代码中的连接"GeoIP" 定义来自于URL Connection:
参考文献:
1. https://blogs.oracle.com/mobile/entry/adf_mobile_rest_json_xml
2. http://www.youtube.com/watch?v=HOesFpjBz2M
3. http://biemond.blogspot.com/2012/10/using-json-rest-in-adf-mobile.html
1. https://blogs.oracle.com/mobile/entry/adf_mobile_rest_json_xml
2. http://www.youtube.com/watch?v=HOesFpjBz2M
3. http://biemond.blogspot.com/2012/10/using-json-rest-in-adf-mobile.html
没有评论:
发表评论