2015-11-02 1 views
0

J'ai importé le référentiel Telegram. et essayé d'exécuter le projet, mais a obtenu l'erreur ci-dessus dans le fichier Passcodeview.java. Il montre l'erreur dans cet extraitErreur types incomparables: Objet et int dans Télégramme

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

Alors que le même projet mené une fois dans ma autre machine correctement, je ne change rien.

Répondre

0

Je pense que votre autre machine ne satisfait pas la condition

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

Donc, ce qui suit: "Si" n'y est jamais exécuté:

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

Le problème est que vous comparez en effet un Obje ct (l'étiquette) au numéro 0.

Changer votre code pour

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

si vous êtes sûr que la balise sera toujours un entier sinon nul.

Si vous n'êtes pas sûr à ce sujet, utilisez try-catch (NumberFormatException).

1

Le problème est sur la ligne: if (passwordFrameLayout.getTag() != 0) {

getTag() retourne un objet, que vous ne pouvez pas comparer à une constante entière. Vous devriez plutôt vérifier que la balise n'est pas nulle. Si vous n'êtes pas sûr que l'étiquette sera toujours un Integer, vous devriez probablement vérifier avec instanceof aussi:

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