我试图从我的 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做到这一点?
答案 0 :(得分:1)
例外情况显然是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
}
}