下载XML-File android错误

时间:2013-01-05 18:16:42

标签: android

我正在开发一个Android应用程序,我需要从网址下载一些简单的XML文件。我已经在我的本地计算机上使用java工作了[最后的代码]。当我尝试在我的Android应用程序中使用此功能时,LogCat会引发数以千计的错误。我包含了Internet权限,我会将错误附加到我的帖子中。 那么,继承我的下载功能。我硬编码了base64字符串,因为它不会随着时间而改变......:

    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很长,所以我上传到了pastebin:http://pastebin.com/DhFra9SG

该功能尚未完成,我目前仅在需要授权的网站上使用它。

总结:它适用于Windows,它不适用于Android! 它

2 个答案:

答案 0 :(得分:2)

这是:
FATAL EXCEPTION: android.os.NetworkOnMainThreadException

崩溃是因为您尝试在UI(主)线程上执行网络操作 网络操作被认为是长时间运行的操作,因此它们可能会阻止UI。因此,如果您尝试在主线程上执行网络操作,则从API Level 11开始,抛出此异常。

长时间运行的操作应该在一个单独的线程中运行,例如,您可以使用AsyncTask从服务器获取XML文件。

答案 1 :(得分:0)

基于最后一段代码和logcat,问题来自于调用Console方法。

  

引起:android.view.ViewRootImpl $ CalledFromWrongThreadException:   只有创建视图层次结构的原始线程才能触及它   视图。

实际上,您无法从doInBackground方法更改/添加一些View对象。如果要更改UI,则必须来自onPreExecute(),onPostExecute(Result)和onProgressUpdate(Progress ...)方法。

检查 AsyncTask 参考,更具体地说, 4个步骤

BR