我导入了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);
}
虽然同一个项目在我的另一台机器上运行一次,但我没有改变任何东西。
答案 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)。