我的要求是在应用程序启动点解析两个网址,这两个网址具有需要在我的应用程序中显示的数据。我通过在数组中保留两个 url 并在后台线程中运行 for 循环,然后将值插入到后台线程中的数据库中来实现此目的,这是解决问题的正确方法吗?
我已在下面发布了我的代码,欢迎任何形式的帮助:)
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);
}
欢迎任何形式的帮助
Y
最佳答案
您目前遇到的问题是:
<强>1。连接按顺序实例化。 如果第一个连接失败(服务器不存在、BlackBerry MDS 服务器关闭等),则您必须等待大约 30 秒,以便连接。打开请求超时,然后再尝试第二个连接。
<强>2。用户界面将在连接尝试期间卡住。我猜您也在事件线程上执行此操作,这意味着应用程序将在 Connection.open
运行时卡住,因为此方法会阻塞。
以上两个问题的解决方案是将每个连接尝试包装到一个单独的线程中。这是一个很好的例子:http://mnarinsky.blogspot.com/2011/03/blackberry-sending-http-request-in.html
<强>3。冗余代码 if(i==0)
代码块在做什么?如果您想做的只是在 i == 0 时使 _id = 1 ,那么只需执行 _id = (i==0) ? 1:0;
。或者颠倒将 URL 放入数组的顺序,仅使用 i,并完全删除 _id 变量。
关于java - 在应用程序启动黑莓时运行多个网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163438/