2011-11-17 106 views
0

我的要求是在應用程序開始點解析兩個網址,這兩個網址具有需要在我的應用程序中顯示的數據。我這樣做是通過在一個數組中保存兩個urls並在後臺線程中運行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); 



} 

幫助是值得歡迎的

AY

+0

我認爲當RequestMethod是GET時,url應該包含類似於www.site.com?variable = value' – pheromix

+0

是的,我不能公開這個url,所以我保留了一些虛擬的東西,但是我的擔心如果我對我所做的事情是正確的。調用多個網址是否正確? – ayachama

+0

如果你知道多線程的概念,那麼很容易做到這一點。 – alishaik786

回答

2

你目前的問題是:

1.連接按順序實例化。 如果第一個失敗(服務器不在那裏,BlackBerry MDS服務器關閉等),那麼在嘗試連接第二個連接之前,您必須等待大約30秒,以便connection.open請求超時。

2.在連接嘗試期間,UI將凍結。我猜你也是在事件線程上這樣做,這意味着應用程序將凍結,而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變量。

+0

感謝您的回覆donturner,我沒有在事件線程上執行此操作,我在單獨的線程上執行此操作,我將引用該博客,感謝您的鏈接,並且我將更改該代碼:) – ayachama

相關問題