[英]Error while running web service on blackberry simulator
I am trying to access a webservice from a BlackBerry application that I developed. 我正在尝试从我开发的BlackBerry应用程序访问Web服务。
However, when running the app I get 但是,当我运行应用程序时,我得到了
" App Error 104 Uncaught: NullPointerException "
“App Error 104 Uncaught:NullPointerException”
I am unable to debug, for some strange reason my debugger auto-closes as soon as I start debugging. 我无法调试,因为一些奇怪的原因我的调试器在我开始调试时自动关闭。
Any suggestions on what could be the reason? 关于可能是什么原因的任何建议? I would like to mention that I have received the three .csi signature files from BlackBerry, but whenever I try to sign the application it fails: The Signature information in the code signing register request is not of appropriate length .
我想提一下,我已收到BlackBerry提供的三个.csi签名文件,但每当我尝试签署该应用程序时,它都会失败: 代码签名注册请求中的签名信息长度不合适 。 Could this error be due to signing the application?
这个错误可能是由于签署申请?
This is what I've done so far: 这是我到目前为止所做的:
package mypackage;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.rmi.RemoteException;
import java.util.Hashtable;
import javacard.framework.UserException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.location.Location;
import javax.microedition.location.LocationProvider;
import org.kobjects.base64.Base64;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
import org.xmlpull.v1.XmlPullParserException;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.component.pane.TitleView;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.image.Image;
import net.rim.device.api.xml.jaxp.SAXParserImpl;
public class LoginTest extends UiApplication
{
public static void main(String[] args)
{
//Create a new instance of the app
//and start the app on the event thread.
LoginTest app = new LoginTest();
app.enterEventDispatcher();
}
public LoginTest()
{
//Display a new screen.
pushScreen(new LoginTestScreen());
}
}
//Create a new screen that extends MainScreen and provides
//behaviour similar to that of other apps.
final class LoginTestScreen extends MainScreen
{
//declare variables for later use
private InfoScreen _infoScreen;
private ObjectChoiceField choiceField;
private int select;
BasicEditField username;
PasswordEditField passwd;
CheckboxField checkBox1;
ButtonField loginBtn;
public LoginTestScreen()
{
//Invoke the MainScreen constructor.
super();
//Add a screen title.
setTitle("Track24ELMS");
LabelField login = new LabelField("ELMS Login", LabelField.FIELD_HCENTER);
login.setFont(Font.getDefault().derive(Font.BOLD, 30));
login.setMargin(10, 0, 20, 0); //To leave some space from top and bottom
HorizontalFieldManager user = new HorizontalFieldManager();
user.setMargin(0, 0, 10, 0);
HorizontalFieldManager pass = new HorizontalFieldManager();
pass.setMargin(0, 0, 20, 0);
HorizontalFieldManager checkbox = new HorizontalFieldManager();
checkbox.setMargin(0, 0, 30, 0);
HorizontalFieldManager btns = new HorizontalFieldManager(HorizontalFieldManager.FIELD_HCENTER);
LabelField usernameTxt = new LabelField("Username :");
LabelField passwordTxt = new LabelField("Password :");
username = new BasicEditField();
passwd = new PasswordEditField();
loginBtn = new ButtonField("Login", ButtonField.CONSUME_CLICK);
loginBtn.setChangeListener(new LoginButtonListener());
checkBox1 = new CheckboxField("Remember me",false);
user.add(usernameTxt);
user.add(username);
pass.add(passwordTxt);
pass.add(passwd);
//checkbox.add(checkBox1);
btns.add(loginBtn);
add(login);
add(user);
add(pass);
add(checkBox1);
add(btns);
}
private class LoginButtonListener implements FieldChangeListener {
public void fieldChanged(Field field, int context) {
//Open a new screen
String uname = username.getText();
String pwd = passwd.getText();
//If there is no input
if (uname.length() == 0 || pwd.length()==0)
Dialog.alert("One of the textfield is empty!");
else
{
final String URL = "http://xxx.xxx.com/xxx/xxx.asmx";
final String METHOD_NAME = "ValidateCredentials";
final String NAMESPACE = "http://tempuri.org/";
final String SOAP_ACTION = NAMESPACE+METHOD_NAME;
//final String URL = "http://prerel.track24elms.com/Android/T24AndroidLogin.asmx/ValidateCredentials";
SoapObject resultRequestSOAP = null;
HttpConnection httpConn = null;
HttpTransport httpt;
System.out.println("The username" + uname + "password" + pwd );
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Username", "abc");//First parameter is tag name provided by web service
request.addProperty("Password", "xyz");
System.out.println("The request is=======" + request.toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true;
envelope.encodingStyle = SoapSerializationEnvelope.XSD;
envelope.setOutputSoapObject(request);
System.out.println("The envelope has the value++++"+ envelope.toString());
/* URL+ Here you can add paramter so that you can run on device,simulator etc. this will work only for wifi */
httpt = new HttpTransport(URL+ ";deviceside=true;ConnectionUID=S TCP-WiFi");
httpt.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
httpt.debug = true;
try
{
System.out.println("SOAP_ACTION == " + SOAP_ACTION);
httpt.call(SOAP_ACTION, envelope);
System.out.println("the tranport" + httpt.toString());
resultRequestSOAP = (SoapObject) envelope.bodyIn;
System.out.println("result == " + resultRequestSOAP);
}
catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("The exception is IO==" + e.getMessage());
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
System.out.println("The exception xml parser example==="
+ e.getMessage());
}
System.out.println( resultRequestSOAP);
if(resultRequestSOAP.equals("credentialaccepted"))
{
UiApplication.getUiApplication().pushScreen(new InfoScreen()); //Open a new Screen
}
else
{
System.out.println("Login details not valid");
}
}
}
};
//To display a dialog box when a BlackBerry device user
//closes the app, override the onClose() method.
public boolean onClose()
{
Dialog.alert("Goodbye!");
System.exit(0);
return true;
}
//Create a menu item for BlackBerry device users to click to see more
//information about the city they select.
private MenuItem _viewItem = new MenuItem("More Info", 110, 10)
{
public void run()
{
//Store the index of the city the BlackBerry device user selects
select = choiceField.getSelectedIndex();
//Display a new screen with information about the
//city the BlackBerry device user selects
_infoScreen = new InfoScreen();
UiApplication.getUiApplication().pushScreen(_infoScreen);
}
};
//Create a menu item for BlackBerry device users to click to close
//the app.
private MenuItem _closeItem = new MenuItem("Close", 200000, 10)
{
public void run()
{
onClose();
}
};
//Create an inner class for a new screen that displays
//information about the city a BlackBerry device user selects.
private class InfoScreen extends MainScreen
{
public InfoScreen()
{
super();
setTitle("Itinerary");
LabelField login = new LabelField("Employee Itinerary", LabelField.FIELD_HCENTER);
Bitmap bitmap = Bitmap.getBitmapResource("img1.jpg");
EditField statusMsg = new EditField("Status Message", "Update status here");
}
}
}
As Th0rndike said, you don't need to sign code to run in the simulator, so that's not your problem (in the simulator). 正如Th0rndike所说,你不需要在模拟器中签署代码来运行,所以这不是你的问题(在模拟器中)。
Also, if you're having trouble even setting breakpoints or stepping through your own Java source code, then: 此外,如果您在设置断点或单步执行自己的Java源代码时遇到问题,那么:
Keep in mind that you will not be able to step into Java code that's part of the Java runtime, and RIM libraries. 请记住,您将无法 进入 Java运行时和RIM库的Java代码。 You do not have the Java source for those, only the binary libraries.
您没有Java 源代码 ,只有二进制库。 So, if you have the line of code:
所以,如果你有代码行:
String s1 = "afdafsdasdf";
String substring = s1.substring(0, 10); // <- can not step IN, can step OVER
MyWidget mw = new MyWidget();
mw.foo(); // <- can step IN, or OVER
you would not be able to step into the second line, because substring(int,int)
is not your code. 你将无法进入第二行,因为
substring(int,int)
不是你的代码。 But, you should be able to step into mw.foo()
without seeing the "Source Not Found" errors, assuming MyWidget.java
is one of your Java source files. 但是,假设
MyWidget.java
是您的Java源文件之一,您应该能够进入mw.foo()
而不会看到“Source Not Found”错误。
If you're running, and having trouble finding out where an uncaught NullPointerException
(or other exception) is being thrown, see this answer . 如果您正在运行,并且无法找到抛出未捕获的
NullPointerException
(或其他异常)的位置, 请参阅此答案 。 Basically, just put this debug code in your main program (eg MyApp.java): 基本上,只需将此调试代码放在主程序中(例如MyApp.java):
public static void main(String[] args)
{
try {
Application theApp = new MyApp();
theApp.enterEventDispatcher();
} catch (Throwable t) {
t.printStackTrace();
}
}
And then, after the Throwable
is caught, check the Eclipse Console window for stack trace information, showing where the exception came from. 然后,在捕获
Throwable
之后,检查Eclipse Console窗口中的堆栈跟踪信息,显示异常的来源。 Then, debug again, trying to step into that code, and see what's wrong. 然后,再次调试,尝试进入该代码,看看有什么问题。
But, getting a functioning debugger is an absolute requirement for productive development. 但是,获得一个正常运行的调试器是生产开发的绝对要求。 Don't bother with other problems until debugging works for you.
在调试为您工作之前,请不要理会其他问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.