gpt4 book ai didi

java - android 从网络读取文本文件

转载 作者:行者123 更新时间:2023-12-01 11:25:18 27 4
gpt4 key购买 nike

我正在尝试从我的 onedrive 读取文本文件,我需要检查数据库的版本并在必要时进行更新。

这是我的代码示例:

 private void checkVersion() {

try {

int dbversion = prefs.getInt("dbversion", 1);
int dblastversion;


URL url = new URL("");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;

str = in.readLine();

in.close();

System.out.println(str);

dblastversion = Integer.valueOf(str);

if (dbversion < dblastversion)
System.out.println("updates available");

} catch (IOException e) {
e.printStackTrace();
}
}

当我尝试运行应用程序崩溃时,我从 logcat 收到此错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.example/com.ex.example.ActMenu}: android.os.NetworkOnMainThreadException

在这条线上

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

有人知道问题出在哪里吗?或者最好使用另一个云来存储文本文件。感谢您的帮助。

更新2

好的,正如 GPRathour 所说,我将代码更新为:

class Getversion_Async extends AsyncTask<Void, Void, Void> {

protected void onPreExecute() {
}

@Override
protected Void doInBackground(Void... arg0) {
System.out.println("starting");
try {

URL url = new URL("https://onedrive.live.com/redir?resid=b9186f8cb138a030!56556&authkey=!AFmrzOGv_OMArzo&ithint=file%2ctxt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;

str = in.readLine();

in.close();

System.out.println(str);

} catch (IOException e) {
e.printStackTrace();
}

return null;
}

@Override
protected void onPostExecute(final Void unused) {

System.out.println("ended");

}
}

我像这样调用 onCreate 来测试:

 new Getversion_Async().execute();

好的,这段代码运行良好,我使用一个网站来托管该文件,链接以 .txt 结尾,工作正常,但我无法编辑该文件。有人知道如何使用 onedrive 做到这一点吗?

最佳答案

异常清楚地表明android.os.NetworkOnMainThreadException。要从服务器读取文件,您需要执行一些网络操作,并且在主线程/UI线程上执行它不是一个好习惯,因为它会挂起UI直到执行操作。

你需要做的是,在 AsyncTask 中运行它

class LogoutUser_Async extends AsyncTask<Void, Void, Void> {

protected void onPreExecute() {
}

@Override
protected Void doInBackground(Void... arg0) {

// Do your network task here

return null;
}

@Override
protected void onPostExecute(final Void unused) {

// Process the result

}
}

关于java - android 从网络读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com