Spanish [solucionado]bug objeto nulo

GonzaloR

Member
Licensed User
Parece que hay un bug al comprobar si una variable es nula.

B4X:
Dim temp As String = Null
If temp = Null Then
    Log("OK")
End If

Lo compila bien, pero nunca se ejecuta Log("OK").
 

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
El compilador al hacer una comparacion de tipo strings manda a llamar a la funcion invisible ".toString" esto hace que Null no sea Null, si no "null"

Para que salga el ok tendria que ser asi:

B4X:
    Dim temp As String = Null
    If temp = "null" Then
        Log("OK")
    End If

o asi.

B4X:
    Dim temp As Object = Null
    If temp = Null Then
        Log("OK")
    End If
 

GonzaloR

Member
Licensed User
Eso es correcto, tambien lo vi en el compilador.
Pero cuando un objeto del tipo que sea se declara nulo, es nulo y nada mas no?
El compilador no deberia fijarse si es de tipo String no?
 

rscheel

Well-Known Member
Licensed User
Longtime User
Siempre que recibas o declares una variable String Null, siempre sera un texto su contenido.

Para que este vacía la variable debe ser así

B4X:
Dim temp As String = ""
    If temp = "" Then
        Log("OK")
    End If
 

GonzaloR

Member
Licensed User
EDITO: El error me lo da en modo release. La variable temp contiene null al intentar leer una celda de SQL y como no existe devuelve null. Y al hacer if temp = "" es cuando da error.

Me lo a compilado asi
B4X:
temp = BaseDatos.LeerCelda("passwords","1","nota")
    If temp = "" Then
B4X:
//BA.debugLineNum = 15;BA.debugLine="temp = BaseDatos.LeerCelda(\"passwords\",\"1\",\"nota\"";
_temp = mostCurrent._basedatos._leercelda(_ba,"passwords","1","nota");
//BA.debugLineNum = 16;BA.debugLine="If temp = \"\" Then";
if ((_temp).equals("")) {

En android 8 da error java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
 
Last edited:

EnriqueGonzalez

Well-Known Member
Licensed User
Longtime User
Puedes hacer lo siguiente.

B4X:
temp = BaseDatos.LeerCelda("passwords","1","nota")
    If isnull(temp) Then
    if temp = "" then
    end if
    end if

Sub IsNull(O as Object) ad Boolean
     Return (O=Null)
End Sub
 
Top