Android java onClick No se pudo ejecutar el método de la actividad
Esta es mi primera vez que trabajo con el recyclerview y estoy recibiendo algunos errores sobre android:onClick="addItem"
aquí es lo que consigo cuando intento agregar una línea de texto a mi recyclerview. Usualmente uso mi teléfono para probar mis aplicaciones.
java.lang.IllegalStateException: Could not execute method of the activity at android.view.View$1.onClick(View.java:4012) at android.view.View.performClick(View.java:4761) at android.view.View$PerformClick.run(View.java:19767) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5312) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4007) at android.view.View.performClick(View.java:4761) at android.view.View$PerformClick.run(View.java:19767) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5312) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference at com.sapps.app.testapp2.MainActivity.addItem(MainActivity.java:53) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View$1.onClick(View.java:4007) at android.view.View.performClick(View.java:4761) at android.view.View$PerformClick.run(View.java:19767) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5312) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Aquí está mi código donde creo que es el error, pero no sé exactamente:
- "ArrayAdapter requiere que el identificador de recurso sea un TextView" xml problems
- Necesita ayuda para cambiar de actividad
- Cómo agregar efecto de sombra en drawable en android
- Eclipse android phonegap config.xml no funciona?
- Solo se muestra un elemento en la vista de reciclado
public class MainActivity extends ActionBarActivity { private EditText mText; private RecyclerView.LayoutManager mLayoutManager; private RecyclerView recyclerView; private Button btn; private CustomRecyclerAdapter mAdapter; private List<Data> mData = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Initializing views. mText = (EditText) findViewById(R.id.textEt); recyclerView = (RecyclerView) findViewById(R.id.recycler); // If the size of views will not change as the data changes. recyclerView.setHasFixedSize(true); // Setting the LayoutManager. mLayoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(mLayoutManager); // Setting the adapter. CustomRecyclerAdapter mAdapter = new CustomRecyclerAdapter(); recyclerView.setAdapter(mAdapter); } // Called when add button is clicked. public void addItem(View v) { if(mText!=null) { Data dataToAdd = new Data(mText.getText().toString()); mData.add(dataToAdd); } }
}
Y aquí está mi adaptador de recyclerview para saber con seguridad:
public class CustomRecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> { CustomRecyclerAdapter mAdapter; private List<Data> mData = Collections.emptyList(); public CustomRecyclerAdapter() { // Pass context or other static stuff that will be needed. } public void updateList(List<Data> data) { mData = data; notifyDataSetChanged(); } @Override public int getItemCount() { return mData.size(); } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext()); View itemView = inflater.inflate(R.layout.list_item, viewGroup, false); return new RecyclerViewHolder(itemView); } @Override public void onBindViewHolder(RecyclerViewHolder viewHolder, int position) { viewHolder.title.setText(mData.get(position).text); } public void addItemInRec(int position, Data data) { mData.add(data); notifyItemInserted(position); } public void removeItem(int position) { mData.remove(position); notifyItemRemoved(position); } }
Mi archivo xml de MainActivity:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/textEt" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="Text"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add" android:onClick="addItem"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> </LinearLayout>
Tal vez sea mi ViewHolder:
public class RecyclerViewHolder extends RecyclerView.ViewHolder { public TextView title; public RecyclerViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.title); } }
O la clase Data.java:
public class Data { public String text; public Data(String text) { this.text = text; } }
- ¿Cómo alineo una barra de herramientas de Android en la parte inferior de la pantalla?
- Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
- Android - acceso a los activos de la aplicación de prueba
- Cómo analizar XML utilizando el analizador SAX
- Palabras en negrita en una cadena de strings.xml en Android
- ¿Cómo hacer que una disposición lineal se pueda desplazar?
- Android XML redondeado esquinas recortadas
- ¿Existe una clase integrada de Android para crear XML de forma no continua?
Usted está recibiendo un puntero nulo en la llamada getText()
Significa la siguiente línea:
EditText mText = (EditText) findViewById(R.id.textEt);
Devuelve null, la solución es comprobar y corregir el diseño para que textEt
está en él.
Editar:
Si está seguro de que está en la eliminación de diseño, elimine la declaración de EditText
.
Declare como private EditText mText;
En el ámbito de la clase
setContentView(R.layout.name_of_layout_here); mText = (EditText) findViewById(R.id.textEt);
La clave está en su mensaje de error:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference at com.sapps.app.testapp2.MainActivity.addItem(MainActivity.java:53)
Un buen consejo para aprender de su salida de error es mirar cada sentencia "Caused by" y explorar a través del registro hasta que encuentre uno de sus propios archivos referenciados. A continuación, esa parte del registro de errores incluso le dirá qué línea su código fallaba (en este caso es la línea 53 en MainActivity.java).
Una excepción de puntero nulo en Java es cuando intenta llamar a un método en algún objeto 'A', pero ese objeto 'A' es actualmente null
.
Por lo que este mensaje de error significa: "En la línea 53 de MainActivity.java, trató de llamar a un método en algún objeto que no existe todavía, por lo que se estrelló."
El método que está fallando es EditText mText = (EditText) findViewById(R.id.textEt);
Por lo general, este tipo de falla significa que no está encontrando la ID correcta de su diseño. Compruebe que textEt
es el ID correcto para este elemento de diseño.
EDITAR:
Aún no estoy seguro de por qué sus vistas no se están poblando, pero sí noté un error con su adaptador. Usted está redefiniendo mAdapter
, por lo que tiene 2 copias, una en el ámbito local y una como miembro de MainActivity. Esto definitivamente va a estropear las cosas.
Aquí:
// Setting the adapter. CustomRecyclerAdapter mAdapter = new CustomRecyclerAdapter(); recyclerView.setAdapter(mAdapter)
Está redefiniendo mAdapter
localmente. Haga esto en su lugar:
// Setting the adapter. mAdapter = new CustomRecyclerAdapter(); recyclerView.setAdapter(mAdapter)