2013-12-09 21 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

相关问题