我想检查是否有我的应用程序的更新。为此,我使用最新的应用程序版本的整数在线提供了一个txt文件。这应该与正在运行的应用程序版本进行比较,并且当有更新的版本时,请打开一个对话框让用户选择在浏览器中打开新的.apk链接或取消它。这给我带来麻烦,我不知道该怎么做。谢谢你的协助!从互联网上获取一个.txt文件,比较它并在AsyncTask中打开一个对话框
的的AsyncTask:
public class UpdateCheck extends AsyncTask <Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
String str = null;
try {
// Create a URL for the desired page
URL url = new URL("http://googledrive.com/host/0B62qO_dIVN_hQ2lGNmJudDFEdHc/ver.txt");
// Read all the text returned by the server
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
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) {
}
PackageInfo packageInfo;
int curVersionCode = 0;
try {
packageInfo = getPackageManager().getPackageInfo("de.grevius.hhgvertretungsplan", 0);
curVersionCode = packageInfo.versionCode;
} catch (NameNotFoundException e) {
// TODO Automatisch generierter Erfassungsblock
e.printStackTrace();
}
if (Integer.parseInt(str) > curVersionCode) {
return true;
}
return false;
}
@Override
public void onPostExecute (Boolean bool){
if(bool){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Add the buttons
builder.setPositiveButton("Ja", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://googledrive.com/host/0B62qO_dIVN_hQ2lGNmJudDFEdHc/Vertretungsplan.apk"));
startActivity(intent); //activity.startIntent...
}
});
builder.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// Set other dialog properties
builder.setMessage("Es ist eine neue Version der App verfügbar. Herunterladen?");
// Create the AlertDialog
AlertDialog dialog = builder.create();
dialog.show();
}
}
}
这里是登录猫:
12-09 17:10:37.305: E/AndroidRuntime(20346): FATAL EXCEPTION: AsyncTask #1
12-09 17:10:37.305: E/AndroidRuntime(20346): java.lang.RuntimeException: An error occured while executing doInBackground()
12-09 17:10:37.305: E/AndroidRuntime(20346): at android.os.AsyncTask$3.done(AsyncTask.java:299)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-09 17:10:37.305: E/AndroidRuntime(20346): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.lang.Thread.run(Thread.java:856)
12-09 17:10:37.305: E/AndroidRuntime(20346): Caused by: java.lang.NumberFormatException: Invalid int: "null"
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.lang.Integer.invalidInt(Integer.java:138)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.lang.Integer.parseInt(Integer.java:355)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.lang.Integer.parseInt(Integer.java:332)
12-09 17:10:37.305: E/AndroidRuntime(20346): at de.grevius.hhgvertretungsplan.MainActivity$UpdateCheck.doInBackground(MainActivity.java:204)
12-09 17:10:37.305: E/AndroidRuntime(20346): at de.grevius.hhgvertretungsplan.MainActivity$UpdateCheck.doInBackground(MainActivity.java:1)
12-09 17:10:37.305: E/AndroidRuntime(20346): at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-09 17:10:37.305: E/AndroidRuntime(20346): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-09 17:10:37.305: E/AndroidRuntime(20346): ... 5 more
我只是增加了一些日志,标签的代码,看到,它正在直到Integer.parseInt(str)
。这时str
是<html>
,我不知道该从何而来,因为当我看着我的“页”的源代码,它说只是数量...`
我解决它通过改变while
循环到while ((str = in.readLine()) != null) { sb.append(str); }
和Integer.parseInt(sb.toString())
。
你是什么意思“它给我麻烦?”它会抛出异常吗?它没有做任何事情吗?你做了什么来调试它? –
你应该使用'SharedPreferences'来做到这一点 – Emmanuel
我添加了LogCat ...我不知道它为什么不能像intendet一样工作,我通过docmentaion和其他所有东西,但没有得到它。 我使用SharedPrefernces,但为什么你的意思是直接? – Grevius