I created an app for display in Listview some data from SQLite, I'm using a class that extend of fragment, when executed the method that send the SimpleCursorAdapter to ListView, appears an error: NullPointerException. I show the class, the xml files and the error.
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.ViewGroup;
//import android.widget.SimpleCursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
/**
* Clase que muestra el listView de los hoteles de comportamiento Fragment
* recordad que las invocaciones Activity no son con this, son con getActivity()
* Created by rogelio on 13/09/14.
*/
public class HotelFragment extends Fragment {
public HotelFragment() {
}
public HotelesDBAdapter dbHelper; //clase anteriormente utilizada, ahora no
public SimpleCursorAdapter dataAdapter;
public Cursor cursor;
public ListView listView;
public SQLiteDatabase db = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.hotel, container, false);
try {
db = getActivity().openOrCreateDatabase("Hoteles", Context.MODE_PRIVATE,null);
crearYasignar(db);
displayListView();//Generate ListView from SQLite Database
}catch (SQLiteException e){
alertas("Error inesperado: " + e.getMessage());
}
return rootView;
}
public void displayListView() {
cursor = db.rawQuery("Select * from Hotel;",null);//replace to cursor = dbHelper.fetchAllHotels();
// The desired columns to be bound
String[] fromFieldNames = {"nombre", "direccion","telefono","email"};
// the XML defined views which the data will be bound to
int[] toViewsID = {R.id.name,R.id.direction,R.id.phone,R.id.email};
Log.e("Checamos que hay id",String.valueOf(R.id.name));
dataAdapter=new SimpleCursorAdapter(getActivity(), R.layout.hotel_info, cursor, fromFieldNames, toViewsID, 0);
listView = (ListView) getActivity().findViewById(R.id.h_listView);
listView.setAdapter(dataAdapter);// Assign adapter to ListView.... here... the bitch error
}
public void alertas(String alerta){
ContextThemeWrapper wrapper = new ContextThemeWrapper(getActivity(), R.style.AppTheme);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);
builder.setIcon(R.drawable.logopequenio);
builder.setTitle(R.string.app_name);
builder.setMessage(alerta);
builder.create().show();
}
public void crearYasignar(SQLiteDatabase dbllega){
try {
dbllega.execSQL("CREATE TABLE if not exists Hotel (_id integer PRIMARY KEY AUTOINCREMENT UNIQUE, nombre text, direccion text, telefono text, email text);");
Cursor ap = dbllega.rawQuery("select * from Hotel;",null);
if(ap.getCount()<=0){
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values ('HOTEL L´ORBE','Poniente 5 #33 entre Madero y Sur 2','01 (272) 72 5 50 33','orbereservaciones@gmail.com');");
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values ('HOTEL HA','Av. Oriente 6 No. 263 Col. Centro Orizaba, Veracruz','01 272 72 53699','HotelHa.Orizaba@gmail.com');");
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values('GRAND HOTEL DE FRANCE','no hay aun','01 272 72 52311','Sin correo');");
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values('HOTEL TRUEBA','Ote. 6 Nº 485, Esq. Sur 11. Orizaba, Ver','01 (272) 724 27 44','reservaciones@hoteltrueba.com');");
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values('HOTEL PLUVIOSILLA','Sin datos','No disponible','no disponible');");
dbllega.execSQL("insert into Hotel (nombre,direccion,telefono,email) values('HOTEL ALAMEDA SUITES','PONIENTE 3 No. 512 COLONIA CENTRO ORIZABA, VER','01 (272) 72 5 7143','no disponible');");
}else {
ap.moveToFirst();
ap.moveToNext();
Log.e("Comprobar que hay datos: ", ap.getString(1)); //comprobamos que haya datos
}
ap.moveToPosition(3);
Log.e("Comprobar que hay datos2: ", ap.getString(1)); //comprobamos que haya datos
db = dbllega;
}catch (SQLiteException e){
alertas("Error desconocido: "+e.getMessage());
}
}
}
XML File hotel_info
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="6dp"
android:background="@drawable/abc_ab_transparent_dark_holo">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Name: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:text="Direction: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView2"
android:text="Phone: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:text="Email: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textView2"
android:layout_alignLeft="@+id/direction"
android:text="TextView" />
<TextView
android:id="@+id/direction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textView3"
android:layout_toRightOf="@+id/textView2"
android:text="TextView" />
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView3"
android:layout_alignBottom="@+id/textView3"
android:layout_toRightOf="@+id/textView3"
android:text="TextView" />
<TextView
android:id="@+id/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView4"
android:layout_alignBottom="@+id/textView4"
android:layout_alignLeft="@+id/phone"
android:text="TextView" />
</RelativeLayout>
XML File hotel
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/fondocelular">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:padding="10dp"
android:text="@string/some_text" android:textSize="20sp" />
<ListView android:id="@+id/h_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00000000"
android:cacheColorHint="#00000000"
android:divider="#00000000"/>
</LinearLayout>
Error.
09-15 23:33:21.250 13630-13630/com.itorizaba.innovaciontecnologica2014 E/Trace﹕ error opening trace file: No such file or directory (2)
09-15 23:33:22.590 13630-13630/com.itorizaba.innovaciontecnologica2014 D/libEGL﹕ loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_121.so
09-15 23:33:22.660 13630-13630/com.itorizaba.innovaciontecnologica2014 D/libEGL﹕ loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_121.so
09-15 23:33:22.710 13630-13630/com.itorizaba.innovaciontecnologica2014 D/libEGL﹕ loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_121.so
09-15 23:33:22.830 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_register_buffer: ID: 4664 handle: 0x52f9c070 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:22.880 13630-13630/com.itorizaba.innovaciontecnologica2014 D/OpenGLRenderer﹕ Enabling debug mode 0
09-15 23:33:23.160 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_register_buffer: ID: 4665 handle: 0x54b40a00 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:24.920 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_register_buffer: ID: 4666 handle: 0x54b44d80 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:25.070 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_register_buffer: ID: 4667 handle: 0x54b7ed50 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:25.100 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_register_buffer: ID: 4668 handle: 0x5388ffa0 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:25.140 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_unregister_buffer: ID: 4664 handle: 0x52f9c070 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:25.140 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IMGSRV﹕ :0: gralloc_unregister_buffer: ID: 4665 handle: 0x54b40a00 size: 540 x 888 fmt: 5 usage: 0xb00
09-15 23:33:29.800 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:0
09-15 23:33:29.800 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:1
09-15 23:33:29.810 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:2
09-15 23:33:29.820 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:3
09-15 23:33:29.820 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:4
09-15 23:33:29.830 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:5
09-15 23:33:29.830 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:6
09-15 23:33:29.830 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:7
09-15 23:33:29.830 13630-13707/com.itorizaba.innovaciontecnologica2014 I/Parsher﹕ notcia:8
09-15 23:33:30.970 13630-13634/com.itorizaba.innovaciontecnologica2014 D/dalvikvm﹕ GC_CONCURRENT freed 1003K, 6% free 21901K/23080K, paused 5ms+2ms, total 18ms
09-15 23:33:35.630 13630-13630/com.itorizaba.innovaciontecnologica2014 W/IInputConnectionWrapper﹕ clearMetaKeyStates on inactive InputConnection
09-15 23:33:37.120 13630-13630/com.itorizaba.innovaciontecnologica2014 E/mDrawerToggle pushed﹕ x
09-15 23:33:37.560 13630-13630/com.itorizaba.innovaciontecnologica2014 E/Apertura completa﹕ !!
09-15 23:33:38.330 13630-13630/com.itorizaba.innovaciontecnologica2014 E/Comprobar que hay datos:﹕ HOTEL HA
09-15 23:33:38.330 13630-13630/com.itorizaba.innovaciontecnologica2014 E/Comprobar que hay datos2:﹕ HOTEL TRUEBA
09-15 23:33:38.330 13630-13630/com.itorizaba.innovaciontecnologica2014 E/Checamos que hay id﹕ 2131296329
09-15 23:33:38.340 13630-13630/com.itorizaba.innovaciontecnologica2014 D/AndroidRuntime﹕ Shutting down VM
09-15 23:33:38.340 13630-13630/com.itorizaba.innovaciontecnologica2014 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4184c7d0)
09-15 23:33:38.360 13630-13630/com.itorizaba.innovaciontecnologica2014 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.itorizaba.innovaciontecnologica2014.HotelFragment.displayListView(HotelFragment.java:64)
at com.itorizaba.innovaciontecnologica2014.HotelFragment.onCreateView(HotelFragment.java:47)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
at android.app.BackStackRecord.run(BackStackRecord.java:635)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5031)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
(ListView) getActivity().findViewById(R.id.h_listView)
A method called in onCreateView()
is too early find your views in the activity. The fragment view hierarchy is not yet a part of the activity and this will return null.
Call findViewById()
on the rootView
you inflated in onCreateView()
. You can pass it to your displayListView()
method as an argument. For example,
displayListView(rootView);
...
private void displayListView(View root) { // also changed to private, no need to be public
...
ListView = (ListView)root.findViewById(...);
(getView()
as suggested by another answer won't work - onCreateView()
has not returned yet.)