android 从网络读取文本文件
android read textfile from web
我正在尝试从我的 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();
好的,这段代码 运行 很好,我使用一个网站来托管文件,link 以 .txt
结尾,工作正常,但我无法编辑文件。有人知道我如何使用 onedrive 做到这一点吗?
异常清楚地写着android.os.NetworkOnMainThreadException
。要从服务器读取文件,您需要执行一些网络操作,并且在 Main Thread / UI Thread
上执行它不是一个好习惯,因为它会挂起 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
}
}
我正在尝试从我的 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();
好的,这段代码 运行 很好,我使用一个网站来托管文件,link 以 .txt
结尾,工作正常,但我无法编辑文件。有人知道我如何使用 onedrive 做到这一点吗?
异常清楚地写着android.os.NetworkOnMainThreadException
。要从服务器读取文件,您需要执行一些网络操作,并且在 Main Thread / UI Thread
上执行它不是一个好习惯,因为它会挂起 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
}
}