将文件从backberry上传到Web服务= JVM错误104 Uncaught NullPointerException?

时间:2011-08-03 12:47:10

标签: web-services blackberry ksoap2

我正在开发一个小型黑莓项目。

以下是应该采取的步骤:

  1. 用户点击发言!按钮。应用程序记录语音。 [没问题]

  2. 用户完成发言后,点击停止!按钮。单击停止按钮后,语音将作为AMR文件保存在BB上。然后,该文件将通过ksoap2发送到Web服务。 Web服务将作为文件名字符串返回响应。问题是 Web服务什么都不返回并且发生错误:JVM错误104:未捕获NullPointerException 我想知道我是否将代码放在正确的位置,或者我对ksoap2做错了什么?

  3. 这是Web服务的代码

    namespace VoiceServer
    {
        /// <summary>
        /// Converting AMR to WAV
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
    
        public class Service1 : System.Web.Services.WebService
        {
    
            public string UploadFile(String receivedByte, String location, String fileName)
    {
        String filepath = fileName;
    
    /*don't worry about receivedByte and location, I will work on them after the problem is     solved :) */
    
        return "Success"+filepath;
    }
    
            private void InitializeComponent()
            {
    
            }
        }
    } 
    

    下面是在Eclipse上运行的代码,我不确定是否在正确的位置放置了将文件发送到Web服务的代码。

    public class MyAudio extends MainScreen {
    private ButtonField _startRecordingButton;
    private ButtonField _stopRecordingButton;
    private HorizontalFieldManager _fieldManagerButtons;
    private VoiceNotesRecorderThread _voiceRecorder;
    private LabelField _myAudioTextField;
    private DateField hourMin;
    private long _initTime;
    
    public MyAudio() {
        _startRecordingButton = new ButtonField("Speak!", ButtonField.CONSUME_CLICK);
        _stopRecordingButton = new ButtonField("Stop!", ButtonField.CONSUME_CLICK);
        _fieldManagerButtons = new  HorizontalFieldManager();
        _voiceRecorder = new VoiceNotesRecorderThread(500000,"file:///store/home/user/voicefile.amr",this);
        _voiceRecorder.start();
    
        myButtonFieldChangeListener buttonFieldChangeListener = new myButtonFieldChangeListener();
        _startRecordingButton.setChangeListener(buttonFieldChangeListener);     
        _stopRecordingButton.setChangeListener(buttonFieldChangeListener);      
    
        _fieldManagerButtons.add(_startRecordingButton);
        _fieldManagerButtons.add(_stopRecordingButton);
    
        _myAudioTextField = new LabelField(" Welcome to VoiceSMS!!!" );
        add(_fieldManagerButtons);
        add(_myAudioTextField);
    
        SimpleDateFormat sdF = new SimpleDateFormat("ss");
        hourMin = new DateField("", 0, sdF);
        hourMin.setEditable(false);
        hourMin.select(false);
        _initTime = System.currentTimeMillis();
        add(hourMin);
    }
    
    public void setAudioTextField(String text) {
        _myAudioTextField.setText(text);
    }
    
    public void startTime() {
        _initTime = System.currentTimeMillis();
        hourMin.setDate(0);
    }
    
    public void updateTime() {
        hourMin.setDate((System.currentTimeMillis()-_initTime));
    }
    
    class myButtonFieldChangeListener implements FieldChangeListener{
        public void fieldChanged(Field field, int context) {
            if(field == _startRecordingButton) {
                try {
                    _voiceRecorder.startRecording();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if(field == _stopRecordingButton) {
                _voiceRecorder.stopRecording();
    
                //----------Send AMR to Web Service-------------//
    
                Object response = null;
                String URL = "http://http://localhost:portnumber/Service1.asmx";
                String method = "UploadFile";
                String NameSpace = "http://tempuri.org/";
                FileConnection fc = null;
                byte [] ary = null;
                try 
                {
                fc = (FileConnection)Connector.open("file:///store/home/user/voicefile.amr",Connector.READ_WRITE);
                int size = (int) fc.fileSize();
                //String a = Integer.toString(size);
                //Dialog.alert(a);
                ary = new byte[size];
                fc.openDataInputStream().read(ary);
                fc.close();
                }
                catch (IOException e1) 
                {
                e1.printStackTrace();
                }
                SoapObject client = new SoapObject(NameSpace,method);
                client.addProperty("receivedByte",new SoapPrimitive(SoapEnvelope.ENC,"base64",Base64.encode(ary)));
                client.addProperty("location","Test/");
                client.addProperty("fileName","file:///store/home/user/voicefile.amr");
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.bodyOut = client;
                HttpTransport http = new HttpTransport(URL);
    
                try 
                {
                http.call(method,envelope);
                }
                catch(InterruptedIOException io)
                {
                io.printStackTrace();
                }
                catch (IOException e) 
                {
                System.err.println(e);
                }
                catch (XmlPullParserException e) 
                {
                System.err.println(e);
    
                }
                catch(OutOfMemoryError e)
                {
                System.out.println(e.getMessage());
                }
                catch(Exception e)
                {
                e.printStackTrace();
                }
    
                try 
                {
                response = envelope.getResponse();
                Dialog.alert(response.toString());
                }
                catch (SoapFault e) 
                {
                System.err.println(e);
                System.out.println("Soap Fault");
                }
                catch(NullPointerException ne)
                {
                System.err.println(ne);
                }
                Dialog.alert(response.toString());
                //Dialog.alert("Send Success");
    
                //----------End of Upload-to-Web-Service--------//
            }           
        }
    }
    }
    

    我不知道该文件是否未发送到Web服务,或者Web服务是否已获得该文件并且没有响应?我是BB编程的真正新手。如果我做错了,请告诉我。

    提前致谢!!!

2 个答案:

答案 0 :(得分:2)

您的网址变量值中存在拼写错误。

“http://”输入两次

String URL =“http:// http:// localhost:portnumber / Service1.asmx”;

答案 1 :(得分:0)

万岁!!!解决了问题!

刚刚更改了Rafael建议的URL,并在Web服务代码中将“WebMethod”添加到“public string UploadFile”上面