2013-03-27 135 views
0

我正在編寫此應用程序,需要同時打開兩個InputStream並具有切換到任何流以便流式傳輸圖像的功能。我可以打開第一個流,但是當我嘗試打開第二個流時,它會掛起。以下是代碼,我已經發表評論,它可以解釋我是否做錯了什麼?Android應用程序在嘗試打開兩個DataInputStream時掛起

public boolean Start() 
    { 
     numberOfServicesUsingThisInstanceLock.lock(); 

     if (numberOfServicesUsingThisInstance > 0) 
     { 
      numberOfServicesUsingThisInstance++; 
      return true; 
     } 

     // else 
     numberOfServicesUsingThisInstance = 1; 

     bisList.clear(); 
     disList.clear();   
     FrameTimeStampList.clear(); 

     try 
     { 
      for (int i = 0; i < this.objConfig.lstCameraInfo.size(); i++) 
      { 
       FrameTimeStampList.add(Long.valueOf("-1")); 
       final CameraInfo ci = this.objConfig.lstCameraInfo.get(i); 
       String sourceUrl = GetMjpegUrlForCam(this.Type, ci.brand, ci.ipAddress); 

       Log.d("DUMPMJPEG_START", "URL: " + sourceUrl); 

       if (sourceUrl == "NONE") continue; 

       URL url = new URL(sourceUrl);    

       Authenticator.setDefault(new Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication (ci.userName, ci.password.toCharArray()); 
        } 
       }); 

       Log.d("DUMPMJPEG_START", "OpenStream"); 
       InputStream in = url.openStream(); // CODE HANGS HERE 
       Log.d("DUMPMJPEG_START", "Creating DataInputStream"); 
       DataInputStream dis = new DataInputStream(in); 
       Log.d("DUMPMJPEG_START", "DataInputStream added to the DataInputStream List"); 

       Log.d("DUMPMJPEG_START", "adding BufferedInputStreams to the list"); 
       BufferedInputStream bis = new BufferedInputStream(dis); 
       Log.d("DUMPMJPEG_START", "BufferendInputStreams added to the list"); 
       disList.add(dis); 
       bisList.add(bis); 
      } 
     } 
     catch(Exception ex) 
     { 
      ex.getMessage(); 
     } 
     return false;  
    } 

回答

1

當你說它掛起,你很長一段時間沒有得到任何迴應,或者你會得到一個異常?

更多到您的代碼:

  1. 你開流,但從來沒有關閉它們。或者你會控制你的應用的另一部分?
  2. 打開流並不使用某種連接超時是一個壞主意。
  3. 該異常不會打印任何內容,因爲您應該使用e.printStackTrace()打印它或將消息發送到某些日誌/輸出。
+0

我很長時間沒有得到任何答覆,沒有II沒有得到任何例外1)我有一個控制它們的應用程序的不同部分2)同意3)同意,但有當我調試它時,在這裏沒有引起異常.. – 2013-03-27 13:15:25

+0

好吧,它好像你有服務器連接問題。當你從代碼之外進行連接時,它是否工作?你是從Android模擬器進行測試嗎?如何對這個功能進行單元測試? – Martin 2013-03-27 13:53:36

+0

是的我猜想是這樣,但我確定它沒有連接問題,因爲我可以打開第一個流,但不是第二個!沒有即時通訊使用設備 – 2013-03-27 13:59:51

相關問題