В моем приложении мне нужно установить соединение Http с веб-сервером, соединение http устанавливается, когда пользователь выбирает элемент ListField. Он работает правильно, я написал метод для установления http-соединения, и он возвращает результат, и моя программа обрабатывает эти данные.
Но он зависает из-за того, что метод, который я написал, не в отдельном потоке (метод, который я написал для установления http-соединения, находится в одноэлементном классе). Теперь я изменил свой метод в отдельном потоке, теперь я получил недопустимое исключение состояния потока.
Итак, я изменил свой класс (класс HttpConnection - теперь он не одноэлементный), теперь нет исключений недопустимого состояния, но я не получаю желаемый результат.
У меня меньше опыта в Java и BlackBerry, я не знаю, как синхронизировать два потока. Поэтому я ввожу статическую переменную 'i', когда программа входит в поток, она становится равной 0, а когда она получает ответ http, она меняется на 1.
Итак, моя программа ждет с помощью цикла while и проверяет значение i. Когда он становится равным 1, я получаю ответ http (который также является статической строковой переменной). Но теперь и моя программа зависает бесконечно, я знаю, что это не очень хороший метод.
Пожалуйста, помогите решить проблему, поделившись своими идеями о синхронизации потоков, ссылочных кодах и т. Д.
Это мой метод бега:
public void run() {
i =0;
observerStatusUpdate(i, "Please Wait");
StreamConnection streamConnection=null;
InputStream inputStream=null;
HttpConnection httpConnection = null;
String result="";
try {
streamConnection=(StreamConnection)Connector.open(url);
httpConnection=(HttpConnection)streamConnection;
httpConnection.setRequestMethod(HttpConnection.GET);
//httpConnection.setRequestProperty("Content-Type", "//json");
int httpStatus=httpConnection.getResponseCode();
if(httpStatus==HttpConnection.HTTP_OK){
inputStream = streamConnection.openInputStream();
//byte[] radioTimeData=new byte[8000];
byte radioTimedataByte;
while((radioTimedataByte=(byte)inputStream.read())!=-1){
result=result+(char)radioTimedataByte;
}
httpres = result;
setResult(result);
i=1;
observerStatusUpdate(i, "");
}
} catch (IOException e) {
i=1;
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("No Internet Connectivity");
//System.exit(0);
}
});
System.out.println(e);
}
И он вызывается с использованием другого класса, например
grabAPIFactory.setUrl(newUrl,o1);
grabAPIFactory.start();
grabAPIFactory.setPriority(Thread.MAX_PRIORITY);
while(GrabapiFactory.i==0){
Thread.sleep();
}
string httpresult = GrabapiFactory.httpres;// static variale getting result from server
// process the httpresult here.....