загрузка файла из backberry в веб-сервис = ошибка JVM 104 Uncaught NullPointerException? - PullRequest
0 голосов
/ 03 августа 2011

Я занимаюсь разработкой небольшого проекта BlackBerry.

Вот шаг, который должен быть:

  1. Пользователь нажимает кнопку Говорить!кнопка.Приложение записывает речевой голос.[Нет проблем]

  2. Когда пользователь закончит говорить, нажмите Стоп!кнопка.После нажатия кнопки «Стоп» речевой голос будет сохранен на BB в виде файла AMR.Затем файл будет отправлен на веб-сервис через ksoap2.Веб-сервис вернет ответ в виде строки с именем файла.Проблема в том, что веб-служба ничего не возвращает, и возникает ошибка: ошибка 104 JVM: Uncaught NullPointerException Интересно, я разместил код в нужном месте или я что-то не так сделал с ksoap2 ??

вот код для веб-службы

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, я не уверен, поместил ли я код для отправки файла на веб-сервисправильное место.

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--------//
        }           
    }
}
}

Я не знаю, отправляется ли файл в веб-службу, или веб-служба получила файл и не дает ответа ???Я настоящий новичок в программировании BB.Пожалуйста, дайте мне знать, если я сделал что-то не так.

Заранее спасибо !!!

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

В вашей переменной URL есть опечатка.

"http://" напечатано дважды

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

0 голосов
/ 05 августа 2011

Ура !!! Проблема решена!

просто изменил URL, как предложил Рафаэль, и добавил [WebMethod] над «публичной строкой UploadFile» в коде веб-службы

...