【问题标题】:java.lang.NumberFormatException: Invalid float: [duplicate]java.lang.NumberFormatException:无效的浮点数:[重复]
【发布时间】:2018-09-26 05:39:27
【问题描述】:

我在playstore里拿到了1.1.2版本的应用。我正在检查应用程序中 playstore 的更新,但出现错误。我进行了研究,但找不到任何解决方案。我遇到了 NumberFormatException 错误。我的实现如下:

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

    }
}

【问题讨论】:

  • 你的currentVersion字段是什么类型的?
  • 您应该使用 versionCode 而不是 versionName。 versionName 是一个字符串,versionCode 是一个整数。
  • 如何解决请解释@AlexShevelev

标签: android android-studio exception


【解决方案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 商店并解析商品详情。

【讨论】:

    【解决方案2】:

    你需要使用..

    .versionCode // this will return integer
    

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

    但是根据您的代码和功能...您必须使用浮动的版本名称,如字符串(例如:- 1.1 或 1.2 等)。然后您也可以使用版本名称。

    【讨论】:

    • 那我该怎么办?你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多