Я написал функцию, которая возвращает строку. И есть реализация потока, функция, как следует, и я вызываю [metaDataTrimmed = getMetaData (url);] эту функцию и сохраняем возвращаемое значение в строковое значение. Моя проблема в том, что функция немедленно возвращает пустую строку, которая является ее начальным значением. И я проверил, что моя функция работает правильно.
Поэтому я пытаюсь использовать метод Thread.sleep () с использованием dirtybit, а также пытаюсь использовать Thread.join (). Есть ли в BlackBerry какой-либо стандартный метод решения проблемы, если нет, то каков хороший подход к решению проблемы?
private String getMetaData(final String mediaUrl){
String metaDataT = "";
Thread metaThread = new Thread(new Runnable(){
public void run(){
try {
StreamConnection streamConnection=null;
HttpConnection httpConnection = null;
InputStream inputStream =null;
streamConnection=(StreamConnection)Connector.open(mediaUrl);
httpConnection=(HttpConnection)streamConnection;
httpConnection.setRequestProperty("Icy-metadata", "1");
int httpStatus=httpConnection.getResponseCode();
if(httpStatus==HttpConnection.HTTP_OK){
String mint = httpConnection.getHeaderField("icy-metaint");
inputStream = streamConnection.openInputStream();
int length= Integer.parseInt(mint);
int b = 0;
int count =0;
while(count++ < length){
b = inputStream.read();
}
int metalength = ((int)b)*16;
// if(metalength <= 0){waitBitMetaData = 1;return;}
byte buf[] = new byte[metalength];
inputStream.read(buf,0,buf.length);
String metaData = new String(buf);
int streamTilleIndex = metaData.indexOf("StreamTitle");
// if(streamTilleIndex <= 0){waitBitMetaData = 1;return;}
String streamTille = metaData.substring(streamTilleIndex);
int eqindex = streamTille.indexOf('=');
// if(eqindex <= 0){waitBitMetaData = 1;return;}
int colindex = streamTille.indexOf(';');
// if(colindex <= 0){waitBitMetaData = 1;return;}
String metaDatam = streamTille.substring(eqindex, colindex);
int lengthOfMaetaDataM = metaDatam.length();
if(lengthOfMaetaDataM <= 0){waitBitMetaData = 1;return;}
metaDataParsed =metaDatam.substring(2, lengthOfMaetaDataM-2);
System.out.println(metaDataParsed);
waitBitMetaData = 1;
}
}
catch (Exception e){
System.out.println(e);
waitBitMetaData = 1;
}
}
});
metaThread.start();
metaThread.start();
//while( metaDataParsed.equals("") || waitBitMetaData == 0){
//try {
// Thread.sleep(50);
//} catch (InterruptedException e) {
//System.out.println(e);
//}
//}
return metaDataParsed;
}