【问题标题】:Download Json from url从 url 下载 Json
【发布时间】:2013-07-08 21:57:47
【问题描述】:

我正在尝试从服务器下载文件 (Json),但由于某种原因,我的代码无法正常工作。 我在清单中给了应用程序互联网权限,网址是正确的(至少当我简单地将其复制并粘贴到浏览器时它可以工作)...... 有人可以看到这里有什么问题吗?我用 try/catch 包围了下载,但它总是抛出异常。

提前感谢您的帮助!

private String downloadFile() throws IOException {
    String toReturn = "";
    URL url = new URL(urlDefault + itemToSearch);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    int responseCode = conn.getResponseCode();
    System.out.println("Code: " + responseCode);

    if (responseCode == HttpURLConnection.HTTP_OK) {

        BufferedInputStream is = new BufferedInputStream(
                conn.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String line;

        while ((line = br.readLine()) != null) {
            toReturn += line;
        }

        br.close();
        is.close();
        conn.disconnect();

    } else {
        throw new IllegalStateException("HTTP response: " + responseCode);
    }
    return toReturn;

}

【问题讨论】:

  • 它抛出了什么异常?
  • 似乎应用程序甚至没有做出 if/else 决定。我在 logcat 中得到的只是我在 try/catch 中定义的“catch”语句

标签: android http url download


【解决方案1】:

如果没有有关异常的更多详细信息,很难说出发生了什么,但我猜您正在尝试访问 UI 线程上的网络。搜索如何使用和 AsyncTask 以执行此操作。它看起来像这样:

public class downloadFile extends AsyncTask<String, Void, String>{
    protected String doInBackground(String... params){
        yourCodeHere
    }


}

【讨论】:

  • 谢谢!这是真的,我正在研究 ui 线程。不使用另一个线程/asyncTask 下载任何东西都不是一个好主意吗?
  • 这不仅不是一个好主意,而且是不允许的。任何从 UI 线程进行网络访问的尝试都将引发异常。这是因为网络调用很容易挂断并延迟主线程响应。如果发生这种情况,那么您的应用可能会因 ANR 错误而崩溃。
猜你喜欢
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多