I have a problem and I would like to ask you for help. I want using a simple cursor adapter, view taken from an SQLite database data in listView in several columns. I made myself a list view (row_players.xml):
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:stretchColumns="*">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/id"
android:layout_column="0"
android:padding="0dp"
android:layout_span="2"
/>
<TextView
android:id="@+id/playerNameListView"
android:layout_column="1"
android:padding="0dp"
/>
</TableRow>
</TableLayout>
Then in DatabaseHelper I created an extensive list which throw collected from the data:
public ArrayList<HashMap<String, String>> getAllPlayers() {
try {
ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
SQLiteDatabase db = this.getReadableDatabase();
String sqlSelect = "SELECT " + _id + ", " +
columnPlayerName + " FROM " + TABLE_NAME;
Cursor select = db.rawQuery(sqlSelect, null);
if(select != null) {
if(select.moveToFirst()) {
do {
map = new HashMap<String, String>();
map.put("id", select.getString(0));
map.put("name", select.getString(1));
arraylist.add(map);
}
while(select.moveToNext());
}
}
select.close();
db.close();
return arraylist;
}
catch (Exception E) {
return null;
}
}
At the end I'm trying to display the data in the list using the Simple Cursor Adapter:
public class ManagePlayers extends AppCompatActivity {
DatabaseHelperPlayer playerDb = new DatabaseHelperPlayer(this);
ListView playersList;
ArrayList<HashMap<String, String>> playerList = playerDb.getAllPlayers();
private void playersListView() {
playersList = (ListView) findViewById(R.id.listPlayer);
SimpleAdapter adt = new SimpleAdapter(this, playerList, R.layout.row_players, new String[]{"id", "name"}, new int[]{R.id.id, R.id.playerNameListView});
playersList.setAdapter(adt);
//adapter = new ArrayAdapter<PlayersList>(this, R.layout.row_players, R.id.id, playerDb.playersList());
//playersList.setAdapter(adapter);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage_players);
playersListView();
}
}
When I try to run the activity I have the following error:
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: FATAL EXCEPTION: main
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: Process: com.example.ukasz.carrom, PID: 2303
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ukasz.carrom/com.example.ukasz.carrom.ManagePlayers}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.-wrap11(ActivityThread.java)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:100)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.widget.ListView.setAdapter(ListView.java:491)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.example.ukasz.carrom.ManagePlayers.playersListView(ManagePlayers.java:62)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.example.ukasz.carrom.ManagePlayers.onCreate(ManagePlayers.java:75)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6237)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.-wrap11(ActivityThread.java)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-06 00:00:44.078 2303-2303/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Please help :(
---EDIT--- activity_manage_players.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true">
<include layout="@layout/content_manage_players" />
</android.support.design.widget.CoordinatorLayout>