Estoy teniendo un problema con un clic de escucha para un inicio de sesión modal botón de enviar.

Este es el error.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

Tengo una comprensión razonable de lo que es una excepción de puntero nulo es y he de búsqueda a fondo de un tema similar a la mía. He probado a formatear el clic de escucha de varias maneras, aseguró que tienen el punto de vista correcto de IDENTIFICACIÓN, etc.

package...
import...
public class MainActivity extends ActionBarActivity implements     NavigationDrawerFragment.NavigationDrawerCallbacks {
//Variables
String currentPage = "";
Stack<String> crumbs = new Stack<String>();
//Fragment managing the behaviors, interactions and presentation of the navigation drawer.
private NavigationDrawerFragment mNavigationDrawerFragment;
//Used to store the last screen title. For use in {@link #restoreActionBar()}.
public CharSequence mTitle;
//temp
AuthenticateUserTokenResult authenticateUserTokenResult;
String loginErrorMessage = "";
String loginErrorTitle = "";
Boolean logonSuccessful = false;
Dialog loginDialog;
//Login EditTexts
EditText Username;
EditText CompanyID;
EditText Password;
Button Submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();  //Set up the drawer.
mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
if(authenticateUserTokenResult == null) {
attemptLogin();
}
}
public void attemptLogin() {
loginDialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar);
loginDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
loginDialog.setContentView(R.layout.login_modal);
loginDialog.setCancelable(false);
//loginDialog.setOnCancelListener(cancelListener);
loginDialog.show();
Submit = (Button)findViewById(R.id.Submit);
Submit.setOnClickListener(new View.OnClickListener() //the error is on this line (specifically the .setOnClickListener)
{
@Override
public void onClick(View v)
{
ClyxUserLogin user = new ClyxUserLogin();
Username = (EditText)findViewById(R.id.Username);
user.logon = Username.getText().toString();
CompanyID = (EditText)findViewById(R.id.CompanyID);
user.idCompany = Integer.parseInt(CompanyID.getText().toString());
Password = (EditText)findViewById(R.id.Password);
user.password = Password.getText().toString();
user.idApplication = 142;
authenticate(user);
}
});
}

Hay más, obviamente, pero no es relevante para el tema que creo.
Aquí está el archivo XML para el cuadro de diálogo que tiene el botón en él.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#3366FF">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#FFFFFF" >
<TextView
android:id="@+id/LoginTitle"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:textColor="#000000"
android:textSize="20sp"
android:text="Login" />
<EditText
android:id="@+id/Username"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/LoginTitle"
android:layout_margin="10dp"
android:hint="Username" />
<EditText
android:id="@+id/CompanyID"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/Username"
android:layout_alignStart="@+id/Username"
android:inputType="number"
android:hint="Company ID" />
<EditText
android:id="@+id/Password"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_below="@+id/CompanyID"
android:layout_alignStart="@+id/Username"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:inputType="textPassword"
android:hint="Password" />
<Button
android:id="@+id/Submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/Password"
android:layout_marginBottom="10dp"
android:layout_centerHorizontal="true"
android:text="Login" />
</RelativeLayout>
</RelativeLayout>

Cualquier ayuda sería muy apreciada.

Volver aquí casi un año más tarde y se siente bien de lo mucho que he mejorado y aprendido de errores tontos como este. Todo el mundo empieza en algún lugar y me encanta que la Pila te apoyo en cada paso del camino.
Todavía tengo este problema, solo que mi Botón no está en el Login Dialog. ¿Cómo puedo solucionarlo, @Jack.Ramsden?

OriginalEl autor Jack.Ramsden | 2015-01-28

4 Comentarios

  1. 53

    Submit es null, porque no es parte de activity_main.xml

    Cuando llame findViewById dentro de un Activity, es ir a buscar un View dentro de su Actividad de diseño.

    intente esto en su lugar :

    Submit = (Button)loginDialog.findViewById(R.id.Submit);

    Otra cosa : utilizar

    android:layout_below="@+id/LoginTitle"

    pero lo que quiero es probablemente

    android:layout_below="@id/LoginTitle"

    Ver esta pregunta acerca de la diferencia entre @id y @+id.

    Gracias, un buen hábito para entrar en lugar de copiar pegar de otros documentos de identidad. Yo no entendía el significado de la + antes. Nunca pensó que mirar en él. (Agregado como aceptado por un poco más desarrollado de respuesta y un poco de ayuda extra)
    Tengo un problema similar, sin embargo, mi botón no está en una ventana de Diálogo. ¿Cómo puedo rectificar, @2Dee?
    es difícil saber sin ver el código, que no debemos hacer en la sección de comentarios. Por favor enviar un nuevo preguntas después de haber comprobado que para los duplicados. No olvides incluir todos los códigos de error y stacktraces.

    OriginalEl autor 2Dee

  2. 8

    android.widget.El botón.setOnClickListener(android.vista.Ver$OnClickListener)’
    en una referencia de objeto null

    Porque Submit botón que está dentro de login_modal por lo que necesita utilizar loginDialog ver a botón de acceso:

    Submit = (Button)loginDialog.findViewById(R.id.Submit);
    Wow, ¿cómo no voy a ver eso. Creo que es porque la excepción de los puntos a la línea de abajo. Gracias por la ayuda
    ¿Qué pasa si mi botón no está dentro de login_modal, pero me sigue apareciendo el mismo error, @ρяσѕρєя K? ?

    OriginalEl autor ρяσѕρєя K

  3. 0

    Intente darle a su Botón en su main.xml un nombre más descriptivo, tales como:

    <Button
    android:id="@+id/buttonXYZ"

    (el uso de minúsculas en sus archivos xml, por lo menos, la primera letra)

    Y, a continuación, en la clase MainActivity, declare como:

    Button buttonXYZ;

    En su onCreate(Bundle savedInstanceState) método, la definen como:

    buttonXYZ = (Button) findViewById(R.id.buttonXYZ);

    También, mover los Botones/TextViews fuera de lugar y antes de la .setOnClickListener – que hace el código más limpio.

    Username = (EditText)findViewById(R.id.Username);
    CompanyID = (EditText)findViewById(R.id.CompanyID);

    OriginalEl autor BenJaminSila

  4. 0

    Yo también tengo de error similar cuando he perdido el código de

    text=(TextView)findViewById(R.id.text);//this line has to be below setcontentview
    setContentView(R.layout.activity_my_otype);
    //this is the correct place
    text.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    }
    });

    Yo tengo trabajo en colocar el código en el orden correcto tal como se muestra a continuación

    setContentView(R.layout.activity_my_otype);
    text=(TextView)findViewById(R.id.text);
    text.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    }
    });

    OriginalEl autor Jose Kj

Dejar respuesta

Please enter your comment!
Please enter your name here