错误无法比较的类型:Telegram中的Object和int

时间:2015-11-02 09:03:05

标签: java android telegram

我导入了Telegram存储库。并尝试运行该项目,但在Passcodeview.java文件中收到了上述错误。 它显示了此代码段中的错误

 @Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    View rootView = getRootView();
    int usableViewHeight = rootView.getHeight() - AndroidUtilities.statusBarHeight - AndroidUtilities.getViewInset(rootView);
    getWindowVisibleDisplayFrame(rect);
    keyboardHeight = usableViewHeight - (rect.bottom - rect.top);

    if (UserConfig.passcodeType == 1 && (AndroidUtilities.isTablet() || getContext().getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)) {
        int t = 0;
        if (passwordFrameLayout.getTag() != 0) {
            t = (Integer) passwordFrameLayout.getTag();
        }
        LayoutParams layoutParams = (LayoutParams) passwordFrameLayout.getLayoutParams();
        layoutParams.topMargin = t + layoutParams.height - keyboardHeight / 2 - (Build.VERSION.SDK_INT >= 21 ? AndroidUtilities.statusBarHeight : 0);
        passwordFrameLayout.setLayoutParams(layoutParams);
    }

    super.onLayout(changed, left, top, right, bottom);
}

虽然同一个项目在我的另一台机器上运行一次,但我没有改变任何东西。

2 个答案:

答案 0 :(得分:1)

问题在于:if (passwordFrameLayout.getTag() != 0) {

getTag()返回一个Object,您无法将其与整数常量进行比较。您应该检查标记是否为空。如果您不确定该代码是否始终为Integer,您也应该与instanceof核对:

if (passwordFrameLayout.getTag() != null && passwordFrameLayout.getTag() instanceof Integer) {

答案 1 :(得分:0)

我认为您的其他机器不满足条件

  

UserConfig.passcodeType == 1 && (AndroidUtilities.isTablet() || getContext().getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)

所以,以下"如果"永远不会在那里执行:

if (passwordFrameLayout.getTag() != 0) {
            t = (Integer) passwordFrameLayout.getTag();
        }

问题在于您确实正在将Object(标记)与数字0进行比较。

将您的代码更改为

if (passwordFrameLayout.getTag() != null) {
            t = (Integer) passwordFrameLayout.getTag();
        }

如果你确定标签将永远是一个整数,如果不是null。

如果您不确定,请使用try-catch(NumberFormatException)。