2013-01-05 66 views
0

我正在開發一個android應用程序,我需要從url下載一些簡單的XML文件的授權。我已經在我的本地計算機上用java工作了[代碼結束]。當我嘗試在我的android應用程序中使用此功能時,LogCat會拋出數千個錯誤。我包括互聯網許可,我會將錯誤附加到我的帖子中。 因此,繼承我的下載功能。我硬編碼以base64字符串,因爲它不會隨着時間而改變......:下載XML文件android錯誤

public String getXmlFromUri(String url) 
{ 
    String strFileContents = new String(""); 
    try{ 
     String base64 = "Basic " + "hardcodedBase64String"; 
     URL pURL = new URL(url); 
     URLConnection conn = pURL.openConnection(); 
     conn.setRequestProperty("Authorization", base64); 
     BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     String data = new String(""); 
     while((data = in.readLine()) != null) 
     { 
      strFileContents += data; 
     } 
     in.close(); 
    }catch(IOException e)  {} 
     if(strFileContents == "") strFileContents = "An error occured or the downloaded file was empty!"; 
    return strFileContents; 
} 

我logcat的是很長,所以我上傳的引擎收錄:http://pastebin.com/DhFra9SG

功能心不是結束,是的,我目前只在需要授權的網站上使用它。

總結:它在Windows上工作,它不適用於Android! 它

回答

2

這就是:
FATAL EXCEPTION: android.os.NetworkOnMainThreadException

它崩潰,因爲你總是試圖在UI(主)線程執行網絡操作。
網絡操作被認爲是長時間運行的操作,因此他們可能會阻止用戶界面。因此,如果您嘗試在主線程上執行網絡操作,則從API Level 11開始,將拋出此異常。

長時間運行操作應該在單獨的線程中運行,例如,您可以使用AsyncTask從服務器獲取XML文件。

+0

Honeycomb(3.0)就是這樣。所以,牢記這一點。主線程在Android的舊版本中受到較少的限制。 –

+0

所以我改變了我的代碼:http://pastebin.com/WG0k9Lne 現在我得到這些錯誤:http://pastebin.com/UB0WTY8a 輸出結束於「2」,所以在InputStream上的函數崩潰= conn .getInputStream();如標記。任何想法如何解決這一問題? – user1951516

+0

我得到它的工作,不得不刪除控制檯(字符串)調用......它不允許這樣做:P愚蠢的機器人使得我很小很生氣:D – user1951516

0

基於您的最後一段代碼和logcat,問題來自Console方法的調用。

產生的原因:android.view.ViewRootImpl $ CalledFromWrongThreadException: 只有創建視圖層次可以觸摸它 享有原來的線程。

實際上,您不能從doInBackground方法更改/添加一些View對象。如果要更改UI,它必須來自onPreExecute(),onPostExecute(Result)和onProgressUpdate(Progress ...)方法。

檢查AsyncTask參考,並且更具體的4個步驟部分

BR