Android Studio从URL检索文件并解析内容



我一辈子都不知道如何从url中检索文本文件并读取其内容这是最简单的任务。我发现的所有代码都是5-12年前的,都不起作用。由于android api 30+主线程上的任何网络请求都会给出android.os.NetworkOnMainThreadException。这部分我一直用kotlin。

我不能使用DownloadManager(除非有一种方法可以临时存储文件并检索内容(,因为文件不需要下载到本地存储,只需读取即可。我看到的最接近的是:安卓系统-如何从url读取文本文件?

try {
// Create a URL for the desired page
URL url = new URL("mysite.com/thefile.txt");
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
// str is one line of text; readLine() strips the newline character(s)
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}

但是这个代码不起作用。

所以在想要跳崖三天后。我找到了答案。当然,这是在这里问了这个问题几分钟后(第一个问题是善意的。(。唯一的问题是,在检索文件的服务器上,你需要HTTPS的SSL证书。我的服务器是http,但我可以在那里获得证书并修复它。为了测试,我抛出了一个github存储库并链接到原始文本文件。这是我的解决方案,如果这能为你节省3天,为我倒一个。

Thread {
try {
val url = URL("https://raw.githubusercontent.com/USERNAME/NeedHTTPSdontWanaSSL/main/info.txt")
val uc: HttpsURLConnection = url.openConnection() as HttpsURLConnection
val br = BufferedReader(InputStreamReader(uc.getInputStream()))
var line: String?
val lin2 = StringBuilder()
while (br.readLine().also { line = it } != null) {
lin2.append(line)
}
Log.d("The Text", "$lin2")
} catch (e: IOException) {
Log.d("texts", "onClick: " + e.getLocalizedMessage())
e.printStackTrace()
}
}.start()

信用:回答时间:2018年8月12日9:29Aishik kirtaniya安卓系统-如何从url读取文本文件?

这个怎么样?

import java.net.URL
val s = "https://www.someplace.com/dir/file.txt"
val text = URL(s).openStream().readAllBytes().decodeToString()

如果你愿意,可以用一些异常处理来包装它。只要不保留对中间流的引用,它就可以立即进行垃圾回收。当流被垃圾收集时,它将被关闭,因此我不需要添加显式关闭它的调用

相关内容

最新更新