Java 在应用程序启动时运行多个url blackberry
我的要求是在应用程序的起点解析两个URL,这两个URL具有需要在我的应用程序中显示的数据。我这样做是通过在一个数组中保留两个URL,在后台线程中运行for循环,然后在后台线程中将值插入数据库,这是解决问题的正确方法吗 我已经在下面发布了我的代码,欢迎任何形式的帮助:)Java 在应用程序启动时运行多个url blackberry,java,blackberry,java-me,blackberry-jde,Java,Blackberry,Java Me,Blackberry Jde,我的要求是在应用程序的起点解析两个URL,这两个URL具有需要在我的应用程序中显示的数据。我这样做是通过在一个数组中保留两个URL,在后台线程中运行for循环,然后在后台线程中将值插入数据库,这是解决问题的正确方法吗 我已经在下面发布了我的代码,欢迎任何形式的帮助:) 公共启动连接(SplashScreen SplashScreen) { URL=新字符串[2]; URL[0]=“http:xxxxxx.com”; URL[1]=“http:yyy.com”; _dbIRef=新类数据库(1);
公共启动连接(SplashScreen SplashScreen)
{
URL=新字符串[2];
URL[0]=“http:xxxxxx.com”;
URL[1]=“http:yyy.com”;
_dbIRef=新类数据库(1);
_dbIRef.setSID(46);
_飞溅屏=(飞溅屏)飞溅屏;
_classDatabase=新建classDatabase();
}
公开募捐
{
int size=url.length;
对于(int i=0;i
欢迎任何形式的帮助
您目前面临的问题有: 1。连接按顺序实例化。 如果第一个连接失败(服务器不在那里,BlackBerry MDS服务器关闭等),则您必须等待约30秒以进行连接。在尝试第二个连接之前,打开请求超时 2。在连接尝试期间,UI将冻结。我猜您也在事件线程上执行此操作,这意味着应用程序将在
连接.open运行时冻结,因为此方法会阻塞
上述两个问题的解决方案是将每个连接尝试包装到一个单独的线程中。下面是一个很好的例子:
3。冗余代码如果(i==0)
代码块在做什么?如果您所要做的只是在i==0时使_id=1,那么只需执行_id=(i==0)?1 : 0;代码>。或者,颠倒将url放入数组的顺序,只使用i,并完全删除_id变量。我认为当RequestMethod
是GET
时,url应该包含类似www.site.com?variable=value
的内容,我无法公开url,所以我保留了一些虚拟内容,但我关心的是我所做的是否正确。调用多个URL是正确的方法吗?如果你知道多线程的概念,那么很容易做到。感谢你的回复alishaik,我想学习如何维护线程池。你遇到过任何例子吗?你不需要在Blackberry中实现线程池,只需要生成线程来建立连接。此外,在BB中可以生成的线程数量有限,但要只建立两个连接,您不必担心这一点。一个工作线程就足够了。感谢您的回复donturner,我不是在事件线程上执行此操作,我是在单独的线程上执行此操作的,我将参考该博客,感谢链接,我将更改代码:)
public StartConnecton(SplashScreen splashScreen)
{
urls = new String[2];
urls[0] = "http:xxxxxx.com";
urls[1] = "http:yyy.com";
_dbIRef = new ClassDatabase(1);
_dbIRef.setSID(46);
_splashScreen = (SplashScreen)splashScreen;
_classDatabase = new ClassDatabase();
}
public void run()
{
int size = urls.length;
for(int i = 0; i < size;i++)
{
if(i==0)
{
_id= 1;
}else if(i==1)
{
_id = 0;
}
try{
String conn = this.getConnectionString();
con = (HttpConnection)Connector.open(urls[i]+getConnectionString());
con.setRequestMethod(HttpConnection.GET);
con.setRequestProperty("User-Agent","Profile/MIDP-1.0 Confirguration/CLDC- 1.0");
System.out.println("CONNECTION!!!!!!!!!!!"+con);
code = con.getResponseCode();
System.out.println("CODE!!!!!!!!!!!"+code+"ID"+_id);
if ( code == HttpConnection.HTTP_OK)
{
is = con.openInputStream();
int length = (int) con.getLength();
new Parser(is,_id);
is.close();
con.close();
}
}catch(Exception e)
{
System.out.println("EXCEPTION!!!!!!!!!!"+e);
}
}
_classDatabase.delete("Delete from topnews where sid = 46");
_classDatabase.insertTopNews();
_classDatabase.insertTabBar();
_classDatabase.insertGalleryInfo();
_topNewsScreen = new TopNewsScreen("TopNews");
_splashScreen.swapScreen(_topNewsScreen);
}