我写了一个返回字符串的函数。并且有一个Thread实现函数,如下所示,我调用[metaDataTrimmed = getMetaData(url);]这个函数并将返回值存储到字符串值。我的问题是该函数立即返回空字符串,这是它的初始值。我检查了我的功能是否正常工作。
所以我尝试使用dirtybit的Thread.sleep()方法,并尝试使用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;
}
答案 0 :(得分:2)
我认为你获得null
Thread
的原因是你不等待线程执行结束。这与BlackBerry无关,但与Java完全相关。要解决这个问题,只需在一个单独的(来自UI)线程上完成整个任务(不仅仅是网络的一部分)。完成任务后,您需要更新UI,然后使用UiApplication.getUiApplication().invokeLater(Runnable action)
模式。