java.lang.NumberFormatException:无效的float:

时间:2018-09-26 05:39:27

标签: android android-studio exception

我在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);

    }
}

2 个答案:

答案 0 :(得分:1)

您需要使用..

.versionCode // this will return integer

.versionName将返回字符串版本名称。而versionCode将返回整数。

但是根据您的代码和功能...您必须像String一样使用版本名称浮动(例如:-1.1或1.2等)。然后您还可以使用版本名称。 / p>

答案 1 :(得分:1)

currentVersiononlineVersion均为String类型。 1.1.2String,而不是数字。

与其将它们作为浮点数进行比较(因为它们是字符串,所以不起作用):

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.8Mountain Lion,这使它们很难进行比较。

更好的解决方案可能是将最新的versionCode存储在网络服务器上并检查此代码,而不是去Play商店并解析商店清单。