我在playstore中获得了版本1.1.2的应用程序。我正在检查应用程序中Playstore的更新,但出现错误。我进行了研究,但没有任何解决方案。我陷入了错误NumberFormatException.I实现如下:
try {
currentVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
我试图从playstore获取应用程序的版本号。
private class GetVersionCode extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... voids) {
String newVersion = null;
try {
Document document = Jsoup.connect("https://play.google.com/store/apps/details?id="+context.getPackageName()+"&hl=en" )
.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();
if (document != null) {
Elements element = document.getElementsContainingOwnText("Current Version");
for (Element ele : element) {
if (ele.siblingElements() != null) {
Elements sibElemets = ele.siblingElements();
for (Element sibElemet : sibElemets) {
newVersion = sibElemet.text();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
@Override
protected void onPostExecute(String onlineVersion) {
super.onPostExecute(onlineVersion);
if (onlineVersion != null && !onlineVersion.isEmpty()) {
if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
//show anything
}
}
Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
}
}
答案 0 :(得分:1)
您需要使用..
.versionCode // this will return integer
.versionName
将返回字符串版本名称。而versionCode
将返回整数。
但是根据您的代码和功能...您必须像String一样使用版本名称浮动(例如:-1.1或1.2等)。然后您还可以使用版本名称。 / p>
答案 1 :(得分:1)
currentVersion
和onlineVersion
均为String
类型。 1.1.2
是String
,而不是数字。
与其将它们作为浮点数进行比较(因为它们是字符串,所以不起作用):
if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
//show anything
}
您应该将它们作为字符串进行比较,以检查版本是否不同:
if (!onlineVersion.equals(currentVersion)) {
//show anything
}
如果要比较onlineVerson
是否较新(而不是只是不同),则应查看该解决方案:How do you compare two version Strings in Java?
比较Android应用程序版本的首选方法当然是通过versionCode
,因为它的类型为int
,并且每个新版本都需要增加。 versionName
可以是一个任意值,没有什么可以阻止您命名第一个版本1.0
和后续版本0.8
或Mountain Lion
,这使它们很难进行比较。
更好的解决方案可能是将最新的versionCode
存储在网络服务器上并检查此代码,而不是去Play商店并解析商店清单。