common_utils icon indicating copy to clipboard operation
common_utils copied to clipboard

add compare versionCode

Open zmGitHub opened this issue 4 years ago • 3 comments

String v1 ="1.0.1"

String v2 ="1.0.2"

v1 > v2

zmGitHub avatar May 14 '20 09:05 zmGitHub

`

// 0代表相等,1代表version1大于version2,-1代表version1小于version2

  static int compareVersion(String version1, String version2) {
    if (Utils.isEmpty(version1) || Utils.isEmpty(version2)) {
      return 0;
    }
    if (version1 == version2) {
      return 0;
    }

    List<String> v1Arr = version1.split(".");
    List<String> v2Arr = version2.split(".");

    int index = 0;
    // 获取最小长度值
    int minLen = min(v1Arr.length, v2Arr.length);
    int diff = 0;

    while (index < minLen && (diff = getIntByValueStr(v1Arr[index]) - getIntByValueStr(v2Arr[index])) == 0) {
      index++;
    }
    if (diff == 0) {
      // 如果位数不一致,比较多余位数
      for (int i = index; i < v1Arr.length; i++) {
        if (getIntByValueStr(v1Arr[i]) > 0) {
          return 1;
        }
      }

      for (int i = index; i < v2Arr.length; i++) {
        if (getIntByValueStr(v2Arr[i]) > 0) {
          return -1;
        }
      }
      return 0;
    } else {
      return diff > 0 ? 1 : -1;
    }
  }

`

zmGitHub avatar May 14 '20 09:05 zmGitHub

一般情况下,版本比较都是放在在服务端的呢,有可能用的versionCode或versionName;升级,强制升级都是服务端在判定。

Sky24n avatar May 14 '20 10:05 Sky24n

  static int compareVersion(String val1, String val2) {
    var arr1 = val1.split(".");
    var arr2 = val2.split(".");
    int length = arr1.length >= arr2.length ? arr1.length : arr2.length;
    int diff = 0;
    int v1;
    int v2;
    for (int i = 0; i < length; i++) {
      v1 = i < arr1.length ? int.parse(arr1[i]) : 0;
      v2 = i < arr2.length ? int.parse(arr2[i]) : 0;
      diff = v1 - v2;
      if (diff == 0)
        continue;
      else
        return diff > 0 ? 1 : -1;
    }
    return diff;
  }

hrxiang avatar Jan 04 '22 03:01 hrxiang