2013-12-09 18 views
1

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

+1

你是什麼意思「它給我麻煩?」它會拋出異常嗎?它沒有做任何事情嗎?你做了什麼來調試它? –

+1

你應該使用'SharedPreferences'來做到這一點 – Emmanuel

+0

我添加了LogCat ...我不知道它爲什麼不能像intendet一樣工作,我通過docmentaion和其他所有東西,但沒有得到它。 我使用SharedPrefernces,但爲什麼你的意思是直接? – Grevius

回答

2

strnull。你的while循環不正確。您不斷循環,直到它的null,從而保證一個空值,當你做Integer.parseInt(str)

您需要存儲使用的最後一個有效的非空字符串後面解析INT。

+0

啊,我明白了,但文件中只有這一行.. – Grevius

+0

我刪除了while,只是把'str = in.readLine();'在那裏,但它仍然給出了一個致命的例外... – Grevius

相關問題