我想檢查是否有我的應用程序的更新。爲此,我使用最新的應用程序版本的整數在線提供了一個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