2010-08-16 16 views
2

我嘗試爲android構建一個https客戶端,我需要獲得Servlet的一些請求 但是當我使用getInputStream方法時,應用程序掛起。httpsURLConnection.getInputStream()掛起

只有當我打電話給方法時,纔會出現錯誤。

String url = "https://.../Servlet"; 

    try { 
    mPushLiteConnection = (HttpsURLConnection) new URL(url).openConnection(); 
    mPushLiteConnection.setDoOutput(true); 
    mPushLiteConnection.setDoInput(true); 
    mPushLiteConnection.setRequestMethod("POST"); 
    mPushLiteConnection.connect(); 

    subscribe(); 

    InputStream in = (InputStream)mPushLiteConnection.getInputStream(); 

    unsubscribe(); 

    mPushLiteConnection.disconnect(); 

    } catch (MalformedURLException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

這只是檢查呼叫,但它沒有工作。 任何想法爲什麼它掛起,並告訴我什麼?

訂閱方法的作品,當我註釋輸入流的行,服務器顯示我都是正確的。 我可以嘗試與Firefox一樣,它的工作原理,我可以看到請求。

我還將密鑰庫放入TrustManager中。

對不起,我的英語我希望我解釋它ennougth。

THX

+0

你的主線程或不同線程上這樣做呢? – Falmarri 2010-08-16 18:33:45

+0

您是否在客戶端安裝了證書? – Vinay 2010-08-17 06:46:04

回答

2

我想我知道原因! getInputStream()方法需要(爲什麼)contentLength! 在我想連接的servlet中,沒有contentLength它是一個推式分塊的servlet ......它將XML的所有時間片段發送的時間不長。

所以.. HttpsURLConnection不是有用的塊!

現在,我嘗試的HttpClient相同的連接 我希望它的工作原理吧...如果還沒有,我跳的車後;)

1

我使用的是不同的線程 是的,我安裝在客戶端證書

我有第二個連接到從另一個servlet加載列表,它工作正常,但我不需要一個InputStream僅用於它的SAX解析器。 但我不能使用這個servlet的SAX解析器,我沒有得到一個XML,只有XML標籤沒有開始文檔標籤

maybie你知道如何忽略開始文檔標籤?我不知道我是否需要SAX

+0

好吧...當它掛起,我殺了服務器,它繼續 我認爲InputStream塊結束永遠不會結束這個Servlet是一個Push Servlet它永遠不會以發送請求結束 – Informatic0re 2010-08-17 08:02:19