Java 在Blackberry中获取无线流媒体元数据时TCP超时
我正在创建一个广播应用程序,将从各种不同的URL流 现在,在从url获取流的同时,我们还需要播放歌曲的内容,即元数据 现在,我在TimerTask中运行另一个线程,每隔40秒创建一个HTTP连接,比如说like 在使用OS 5及以上版本的模拟器时,没有问题,但当我运行相同的线程进行两到三次迭代时,元数据会一直接收到,但之后出现TCP超时异常,这会停止整个系统和设备,甚至会断开internet连接 你能找到解决这个问题的办法吗 我还分享了从流式URL获取元数据的代码Java 在Blackberry中获取无线流媒体元数据时TCP超时,java,blackberry,timeout,Java,Blackberry,Timeout,我正在创建一个广播应用程序,将从各种不同的URL流 现在,在从url获取流的同时,我们还需要播放歌曲的内容,即元数据 现在,我在TimerTask中运行另一个线程,每隔40秒创建一个HTTP连接,比如说like 在使用OS 5及以上版本的模拟器时,没有问题,但当我运行相同的线程进行两到三次迭代时,元数据会一直接收到,但之后出现TCP超时异常,这会停止整个系统和设备,甚至会断开internet连接 你能找到解决这个问题的办法吗 我还分享了从流式URL获取元数据的代码 class metaData
class metaData extends Thread {
public void run() {
try {
boolean metaDataCheckBit = false;
StreamConnection streamConnection = (StreamConnection)Connector.open(url);
HttpConnection httpConnection = (HttpConnection)streamConnection;
httpConnection.setRequestProperty("Icy-metadata", "1");
int httpStatus = httpConnection.getResponseCode();
if (httpStatus==HttpConnection.HTTP_OK) {
String mint = httpConnection.getHeaderField("icy-metaint");
InputStream 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) return;
byte buf[] = new byte[metalength];
inputStream.read(buf,0,buf.length);
final String metaData = new String(buf);
final String streamTille =
metaData.substring(14, metaData.indexOf("StreamUrl")-2);
System.out.println("Stream Title--------"+streamTille);
UiApplication.getUiApplication().invokeAndWait(new Runnable(){
public void run() {
try {
titleRf.setText(streamTille);
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
}
});
}
} catch (Exception e){
System.out.println("Exception in meta data...."+e);
}
}
}
类元数据扩展线程{
公开募捐{
试一试{
布尔metaDataCheckBit=false;
StreamConnection StreamConnection=(StreamConnection)连接器。打开(url);
HttpConnection HttpConnection=(HttpConnection)流连接;
setRequestProperty(“Icy元数据”,“1”);
int-httpStatus=httpConnection.getResponseCode();
if(httpStatus==HttpConnection.HTTP\u确定){
字符串mint=httpConnection.getHeaderField(“ICICE metaint”);
InputStream InputStream=streamConnection.openInputStream();
int length=Integer.parseInt(mint);
int b=0;
整数计数=0;
while(计数++<长度){
b=inputStream.read();
}
国际金属长度=((国际)b)*16;
如果(metalength您没有关闭连接。但是,我不知道这是否会导致问题。请尝试在finally子句中关闭流和连接。谢谢Smith,在关闭所有流之后,它工作了!!!哈哈,幸好它工作了。在BlackBerry中,同时连接的数量有限。在几个连接打开后,我们将继续为您关闭当你尝试打开一个新的twitter时,你已经达到了极限,因此超时了。yupss…嘿,你能帮我一个忙吗,你在BB中集成了twitter吗?没有。从来没有在BB中使用过twitter。