问题
how can i send JSON request from blackberry application that works as client to the server to get an information from the server to use them in BB application i use blackberry eclipse under windows 7
i try this code
public void loginRequest() throws IOException, JSONException{
HttpConnection c = null;
InputStream is = null;
int rc;
JSONObject postObject = new JSONObject();
postObject.put("method", method);
//postObject.put("params", Parameters);
try{
c = (HttpConnection)Connector.open(urlPath);
// Set the request method and headers
c.setRequestMethod(HttpConnection.GET);
c.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
c.setRequestProperty("Content-Length", "" + (postObject.toString().length() - 2));
c.setRequestProperty("method", "GET");
// Getting the response code will open the connection,
// send the request, and read the HTTP response headers.
// The headers are stored until requested.
rc = c.getResponseCode();
if (rc != HttpConnection.HTTP_OK){
throw new IOException("HTTP response code: " + rc);
}
is = c.openInputStream();
// Get the length and process the data
int len = (int)c.getLength();
if (len > 0){
int actual = 0;
int bytesread = 0 ;
byte[] data = new byte[len];
while ((bytesread != len) && (actual != -1)){
actual = is.read(data, bytesread, len - bytesread);
bytesread += actual;
}
//Get the JSON String
System.out.println(new String(data));
}
else{
int ch;
while ((ch = is.read()) != -1){
//TODO
/*
process((byte)ch);
*/
}
}
}catch (ClassCastException e){
throw new IllegalArgumentException("Not an HTTP URL");
}finally {
if (is != null)
is.close();
if (c != null)
c.close();
}
}
i call this method by run method in a thread
when the simulator reach (rc = c.getResponseCode();) running code stops
i debug the code and it stops when it reach this statement with this error
Local connection timed out after ~ 120000
any help
回答1:
When running the application in simulator, make sure you enabled the Launch Mobile Data System Connection Service (MDS-CS) with simulator in Eclipse's "Run Configurations" or "Debug Configurations"->"Simulator tab"->"General tab".
If it is not enabled, you should check this guide "Testing a BlackBerry device application with the BlackBerry Smartphone Simulator", particularly the "Testing a BlackBerry device application that uses an HTTP connection" section. To make a long story short, you have to enable the MDS-CS. After enabling it, you should restart your simulator. Here is a quote from this guide:
Start the BlackBerry MDS Connection Service when you start the BlackBerry Smartphone Simulator
- In Eclipse®, on the Run menu, click Debug Configurations or Run Configurations.
- Expand the BlackBerry Simulator item.
- Complete one of the following tasks:
- To work with an existing launch configuration, under BlackBerry Simulator, click a launch configuration.
- To create a new launch configuration, right-click BlackBerry Simulator, select New.
- Click the Simulator tab.
- Click the General tab.
- Select the Launch Mobile Data System Connection Service (MDS-CS) with simulator check box.
- Click Apply.
Edit:
Alternatively, when using a simulator you can add ;deviceside=true
suffix to the url that you pass to Connector.open()
. By setting deviceside=true you specify that the underlying TCP connection should be opened directly from the handheld (simulator in your case), therefore BlackBerry MDS Connection Service will not be used. Here is a code snippet based on your code:
if (DeviceInfo.isSimulator()) {
urlPath += ";deviceside=true";
} else {
urlPath += connectionDependentSuffix; // suffix that is relevant to
// the desired connection option
}
c = (HttpConnection)Connector.open(urlPath);
Hope this helps.
来源:https://stackoverflow.com/questions/9339656/send-json-request-from-blackberry-application