在app启动blackberry运行多个url

时间:2011-11-17 07:21:48

标签: java blackberry java-me blackberry-jde

我的要求是在应用程序起始点解析两个URL,这两个URL包含需要在我的应用程序中显示的数据。我这样做是通过在一个数组中保留两个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);



}

欢迎任何形式的帮助

A Y

1 个答案:

答案 0 :(得分:2)

您目前遇到的问题是:

<强> 1。连接按顺序实例化。 如果第一个失败(服务器不存在,BlackBerry MDS服务器关闭等),那么在尝试第二个连接之前,您必须等待大约30秒才能使connection.open请求超时。

<强> 2。用户界面将在连接尝试期间冻结。我猜你也在事件线程上这样做,这意味着应用程序将在Connection.open运行时冻结,因为此方法会阻塞。

上述两个问题的解决方案是将每个连接尝试包装到单独的线程中。这是一个很好的例子:http://mnarinsky.blogspot.com/2011/03/blackberry-sending-http-request-in.html

第3。冗余代码那个if(i==0)代码块在做什么?如果你想要做的就是当i == 0时make _id = 1,那么就做_id = (i==0) ? 1 : 0;。或者,颠倒将URL放入数组的顺序,只需使用i,然后完全删除_id变量。