Blackberry中解析JSON数据的问题
我是BB的新手,尝试解析Json文件,只想在对话框中打印Json响应。但是它会引发一个关于Blackberry中解析JSON数据的问题,blackberry,java-me,Blackberry,Java Me,我是BB的新手,尝试解析Json文件,只想在对话框中打印Json响应。但是它会引发一个关于没有应用程序实例的错误,并且也会得到非法状态异常。我对它使用GETurl方法。 我还可以在ui应用程序中添加权限,如 ui应用程序屏幕 public static void main(String[] args) { ApplicationPermissions permRequest = ApplicationPermissionsManager.getInstance().getApplicat
没有应用程序实例的错误,并且也会得到非法状态异常
。我对它使用GET
url方法。
我还可以在ui应用程序中添加权限,如
ui应用程序屏幕
public static void main(String[] args) {
ApplicationPermissions permRequest = ApplicationPermissionsManager.getInstance().getApplicationPermissions();
permRequest = new ApplicationPermissions();
permRequest.addPermission( ApplicationPermissions.PERMISSION_INTERNET );
ApplicationPermissionsManager.getInstance().invokePermissionsRequest( permRequest );
UiFunApplication app = new UiFunApplication();
app.enterEventDispatcher();
这是主屏幕代码……
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import net.rim.device.api.applicationcontrol.ApplicationPermissions;
import net.rim.device.api.applicationcontrol.ApplicationPermissionsManager;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.container.MainScreen;
import com.rim.samples.jsonme.cakeorder.org.json.me.JSONArray;
import com.rim.samples.jsonme.cakeorder.org.json.me.JSONObject;
public class UiMainscreen extends MainScreen {
public UiMainscreen() {
Dialog.alert("asdasd");
HttpConnection conn = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try {
// String url = "http://api.twitter.com/1/users/show.json?screen_name=Kaka";
String url = "http://docs.blackberry.com/sampledata.json";
conn = (HttpConnection) Connector.open(url, Connector.READ);
conn.setRequestMethod(HttpConnection.GET);
int code = conn.getResponseCode();
if (code == HttpConnection.HTTP_OK) {
in = conn.openInputStream();
out = new ByteArrayOutputStream();
byte[] buffer = new byte[in.available()];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer);
}
out.flush();
String response = new String(out.toByteArray());
Dialog.alert("response is ::"+response);
} catch (Exception e) {
Dialog.alert(e.getMessage());
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
}
}
}
更新::
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import net.rim.device.api.applicationcontrol.ApplicationPermissions;
import net.rim.device.api.applicationcontrol.ApplicationPermissionsManager;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.CheckboxField;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.container.MainScreen;
import com.rim.samples.jsonme.cakeorder.org.json.me.JSONArray;
import com.rim.samples.jsonme.cakeorder.org.json.me.JSONObject;
public class UiMainscreen extends MainScreen implements FieldChangeListener {
public UiMainscreen() {
ButtonField loginButton;
loginButton = new ButtonField("Go", ButtonField.CONSUME_CLICK);
loginButton.setChangeListener(this);
add(loginButton);
}
public void fieldChanged(Field field, int context) {
// TODO Auto-generated method stub
if (field instanceof ButtonField) {
Dialog.alert("Message");
HttpConnection conn = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try {
// String url =
// "http://api.twitter.com/1/users/show.json?screen_name=Kaka";
String url = "http://docs.blackberry.com/sampledata.json";
conn = (HttpConnection) Connector.open(url, Connector.READ);
conn.setRequestMethod(HttpConnection.GET);
int code = conn.getResponseCode();
if (code == HttpConnection.HTTP_OK) {
in = conn.openInputStream();
out = new ByteArrayOutputStream();
byte[] buffer = new byte[in.available()];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer);
}
out.flush();
String response = new String(out.toByteArray());
Dialog.alert("response is ::" + response);
/*
* JSONObject resObject = new JSONObject(response); String
* key = resObject.getString("vehicleType");
*
* Vector resultsVector = new Vector(); JSONArray jsonArray
* = resObject.getJSONArray("name"); if (jsonArray.length()
* > 0) { for (int i = 0; i < jsonArray.length();i++) {
* Vector elementsVector = new Vector(); JSONObject jsonObj
* = jsonArray.getJSONObject(i);
* elementsVector.addElement(jsonObj
* .getString("experiencePoints"));
* elementsVector.addElement
* (jsonObj.getString("Insert Json Array Element Key2"));
* resultsVector.addElement(elementsVector); } }
*/
}
} catch (Exception e) {
Dialog.alert(e.getMessage());
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Dialog.alert(e.getMessage());
}
}
}
}
}
}
import java.io.ByteArrayOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.Vector;
导入javax.microedition.io.Connector;
导入javax.microedition.io.HttpConnection;
导入net.rim.device.api.applicationcontrol.ApplicationPermissions;
导入net.rim.device.api.applicationcontrol.ApplicationPermissionsManager;
导入net.rim.device.api.ui.Field;
导入net.rim.device.api.ui.FieldChangeListener;
导入net.rim.device.api.ui.component.ButtonField;
导入net.rim.device.api.ui.component.CheckboxField;
导入net.rim.device.api.ui.component.Dialog;
导入net.rim.device.api.ui.container.main屏幕;
导入com.rim.samples.jsonme.cakeorder.org.json.me.JSONArray;
导入com.rim.samples.jsonme.cakeorder.org.json.me.JSONObject;
公共类UiMainscreen扩展MainScreen实现FieldChangeListener{
公共UiMainscreen(){
按钮字段登录按钮;
loginButton=新建按钮字段(“Go”,按钮字段。单击);
setChangeListener(这个);
添加(登录按钮);
}
公共无效字段已更改(字段,int上下文){
//TODO自动生成的方法存根
if(按钮字段的字段实例){
对话框。警报(“消息”);
HttpConnection conn=null;
InputStream in=null;
ByteArrayOutputStream out=null;
试一试{
//字符串url=
// "http://api.twitter.com/1/users/show.json?screen_name=Kaka";
字符串url=”http://docs.blackberry.com/sampledata.json";
conn=(HttpConnection)Connector.open(url,Connector.READ);
conn.setRequestMethod(HttpConnection.GET);
int code=conn.getResponseCode();
if(code==HttpConnection.HTTP\u OK){
in=conn.openInputStream();
out=新的ByteArrayOutputStream();
byte[]buffer=新字节[in.available()];
int len=0;
而((len=in.read(buffer))>0){
输出。写入(缓冲区);
}
out.flush();
字符串响应=新字符串(out.toByteArray());
Dialog.alert(“响应为::”+响应);
/*
*JSONObject resObject=新JSONObject(响应);字符串
*key=resObject.getString(“vehicleType”);
*
*Vector resultsVector=new Vector();JSONArray JSONArray
*=resObject.getJSONArray(“name”);if(jsonArray.length()
*>0){for(inti=0;i
请尝试以下代码-
final ButtonField b=new ButtonField("JSON");
add(b);
FieldChangeListener listener=new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
if(field==b){
try {
String httpURL = "http://docs.blackberry.com/sampledata.json";
HttpConnection httpConn;
httpConn = (HttpConnection) Connector.open(httpURL);
httpConn.setRequestMethod(HttpConnection.POST);
DataOutputStream _outStream = new DataOutputStream(httpConn.openDataOutputStream());
byte[] request_body = httpURL.getBytes();
for (int i = 0; i < request_body.length; i++) {
_outStream.writeByte(request_body[i]);
}
DataInputStream _inputStream = new DataInputStream(
httpConn.openInputStream());
StringBuffer _responseMessage = new StringBuffer();
int ch;
while ((ch = _inputStream.read()) != -1) {
_responseMessage.append((char) ch);
}
String res = (_responseMessage.toString());
String responce = res.trim();
Dialog.alert(responce);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
b.setChangeListener(listener);
最终按钮字段b=新按钮字段(“JSON”);
添加(b);
FieldChangeListener listener=新的FieldChangeListener(){
公共无效字段已更改(字段,int上下文){
如果(字段==b){
试一试{
字符串httpURL=”http://docs.blackberry.com/sampledata.json";
HttpConnection-httpConn;
httpConn=(HttpConnection)Connector.open(httpURL);
setRequestMethod(HttpConnection.POST);
DataOutputStream _outStream=新的DataOutputStream(httpConn.openDataOutputStream());
byte[]请求_body=httpURL.getBytes();
for(int i=0;i