gpt4 book ai didi

android - Jsoup 的版本检查器不再工作

转载 作者:行者123 更新时间:2023-11-30 00:01:58 25 4
gpt4 key购买 nike

我有一个应用程序在 Play 商店上线了将近一年。我正在使用以下代码检查当前版本并显示用户弹出窗口以在新版本可用时进行更新。

private boolean checkVersionNumber() {
boolean isCurrentVersion = true;
DebugLog.d(TAG + "https://play.google.com/store/apps/details?id=" + getPackageName());

VersionChecker versionChecker = new VersionChecker();

try {
String latestVersion = versionChecker.execute().get();
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
String currentVersion = pInfo.versionName;

if (!TextUtils.isEmpty(latestVersion) && !TextUtils.isEmpty(currentVersion)) {
DebugLog.d(TAG + "checkVersionNumber: VERSIONS NOT EMPTY");
if (latestVersion.equalsIgnoreCase(currentVersion)) {
DebugLog.d(TAG + "checkVersionNumber: IS THE CURRENT VERSION");
isCurrentVersion = true;
} else {
DebugLog.d(TAG + "checkVersionNumber: IS THE CURRENT VERSION");
isCurrentVersion = false;
}
} else {
DebugLog.d(TAG + "checkVersionNumber: VERSIONS WERE EMPTY");
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}

return isCurrentVersion;

}

下面是VersionChecker

的代码
public class VersionChecker extends AsyncTask<String, String, String> {

String newVersion;

@Override
protected String doInBackground(String... params) {

try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + getPackageName())
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com").get()
.select("div[itemprop=softwareVersion]").first()
.ownText();
} catch (IOException e) {
e.printStackTrace();
}

return newVersion;
}
}

到目前为止一切正常。但是在过去的一个月里,所有用户都在崩溃。

java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.jsoup.nodes.Element.ownText()' on a null object reference
at com.myapp.activity.SplashActivity$VersionChecker.doInBackground(SplashActivity.java:190)
at com.myapp.activity.SplashActivity$VersionChecker.doInBackground(SplashActivity.java:176)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)

我不确定哪里出了问题。有谁知道这个 api 是否可以正常工作......???

最佳答案

为当前版本解析 Play 商店是一个非常糟糕的主意。 Play 商店可以随时更改它的 HTML(如您所知)。对于有正当理由暂时使用旧版本(例如,他们正在旅行并且使用非常昂贵的互联网)的用户,它也会很糟糕地对待他们。

一个更好的主意是使用类似 Firebase remote config 的东西配置您的应用程序的最低可接受版本。在您发布应用程序更新后的某个时间(可能一两周)将此更新到最新版本。这样:

  • 您可以完全控制整个过程
  • Play 商店 HTML 更改不会导致崩溃
  • 您让用户有机会控制何时升级到对他们方便的时间

关于android - Jsoup 的版本检查器不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com