0

我正在开发一个 android 应用程序,我需要从 url 下载一些具有授权的简单 XML 文件。我已经在我的本地计算机上用 java 工作了 [最后的代码]。当我尝试在我的 android 应用程序中使用此功能时,LogCat 会引发数千个错误。我包括了互联网许可,我会将错误附加到我的帖子中。所以,这是我的下载功能。我硬编码了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!它

4

2 回答 2

2

这里是:
FATAL EXCEPTION: android.os.NetworkOnMainThreadException

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

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

于 2013-01-05T18:20:39.237 回答
0

根据您的最后一段代码和 logcat,问题来自对 Console 方法的调用。

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

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

检查AsyncTask参考,更具体地说是The 4 steps section

BR

于 2014-07-03T15:41:19.357 回答