-1

I'm trying to load some names into a list but I don't seem to get far. Whenever I try to run my code, it gives me this:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.gijbelssiemen.herexamen.Model.Artist.getNaam()' on a null object reference
                                                                           at com.gijbelssiemen.herexamen.TabFragment1.addArtistsToList(TabFragment1.java:97)
                                                                           at com.gijbelssiemen.herexamen.TabFragment1.onViewCreated(TabFragment1.java:66)

My code looks like this:

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.AdapterView;

import com.gijbelssiemen.herexamen.ArtistInfoActivity;
import com.gijbelssiemen.herexamen.Adapter.ArtistListAdapter;
import com.gijbelssiemen.herexamen.Database.DatabaseHelper;
import com.gijbelssiemen.herexamen.Model.Artist;

import java.util.ArrayList;


public class TabFragment1 extends Fragment {

View rootView;
DatabaseHelper db;
Artist artist;

Integer[] imageId = {
        R.drawable.asa_moto,
        R.drawable.bea1991,
        R.drawable.easter,
        R.drawable.he4rtbroken,
        R.drawable.kablam,
        R.drawable.le1f,
        R.drawable.pruikduif,
        R.drawable.sheniqua,
        R.drawable.syracuse
};

ArrayList<String> artists;

ListView listView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    db = new DatabaseHelper(getActivity());
    artist = new Artist();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.tab_fragment_1, container, false);
    db.deleteArtist(artist);
    addArtists();
    return rootView;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    addArtistsToList();
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            long ids = parent.getItemIdAtPosition(position);
            int artistId = (int) ids;
            Log.d("ID", Long.toString(ids));
            Intent artistInfo = new Intent(getActivity(), ArtistInfoActivity.class);
            artistInfo.putExtra("Naam", db.getArtist(artistId + 1).getNaam());
            artistInfo.putExtra("Beschrijving", db.getArtist(artistId + 1).getBeschrijving());
            artistInfo.putExtra("Image", db.getArtist(artistId + 1).getImage());
            startActivity(artistInfo);
        }
    });
}

private void addArtists() {
    Log.d("Insert: ", "Inserting ..");
    db.addArtist(new Artist("ASA MOTO", R.string.asa_moto_description, R.drawable.asa_moto));
    db.addArtist(new Artist("BEA1991", R.string.bea1991_description, R.drawable.bea1991));
    db.addArtist(new Artist("EASTER", R.string.easter_description, R.drawable.easter));
    db.addArtist(new Artist("HE4RTBROKEN", R.string.he4rtbroken_description, R.drawable.he4rtbroken));
    db.addArtist(new Artist("KABLAM", R.string.kablam_description, R.drawable.kablam));
    db.addArtist(new Artist("LE1F", R.string.le1f_description, R.drawable.le1f));
    db.addArtist(new Artist("PRUIKDUIF", R.string.pruikduif_description, R.drawable.pruikduif));
    db.addArtist(new Artist("SHENIQUA WORLD TOUR", R.string.sheniqua_world_tour_description, R.drawable.sheniqua));
    db.addArtist(new Artist("SYRACUSE", R.string.syracuse_description, R.drawable.syracuse));
}

private void addArtistsToList() {
    artists = new ArrayList<String>();
    artists.add(db.getArtist(1).getNaam());
    artists.add(db.getArtist(2).getNaam());
    artists.add(db.getArtist(3).getNaam());
    artists.add(db.getArtist(4).getNaam());
    artists.add(db.getArtist(5).getNaam());
    artists.add(db.getArtist(6).getNaam());
    artists.add(db.getArtist(7).getNaam());
    artists.add(db.getArtist(8).getNaam());
    artists.add(db.getArtist(9).getNaam());

    ArtistListAdapter adapter = new ArtistListAdapter(getActivity(), artists, imageId);
    listView = (ListView) rootView.findViewById(R.id.list_view);
    listView.setAdapter(adapter);
}
}

If anyone could point me in the right direction with this one, that would be appreciated. Thanks in advance!

Error line 97:

artists.add(db.getArtist(1).getNaam());

and error line 66:

addArtistsToList();

this is the getArtist method in the DatabaseHelper.java:

public Artist getArtist(int artistId) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(DatabaseContract.ArtistEntry.TABLE_NAME, new String[]{DatabaseContract.ArtistEntry._ID,
                    DatabaseContract.ArtistEntry.COLUMN_ARTIST_NAAM, DatabaseContract.ArtistEntry.COLUMN_BESCHRIJVING, DatabaseContract.ArtistEntry.COLUMN_IMAGE}, DatabaseContract.ArtistEntry._ID + "=?",
            new String[]{String.valueOf(artistId)}, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        artist = new Artist(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), Integer.parseInt(cursor.getString(2)), Integer.parseInt(cursor.getString(3)));
    }

    return artist;
}
Siemen Gijbels
  • 35
  • 1
  • 1
  • 17
  • There's an `Artist` field or variable with null value. Why don't you show us exactly which line is 97 in `TabFragment1` instead of making us count the lines for you? – nanofarad Aug 12 '16 at 21:38
  • @hexafraction you're right, sorry. Added the lines! – Siemen Gijbels Aug 12 '16 at 21:42
  • 1
    Thanks! Could you also show us the `DatabaseHelper` class (or the relevant bits that implement `getArtist`? – nanofarad Aug 12 '16 at 21:44
  • @hexafraction added that as well! – Siemen Gijbels Aug 12 '16 at 21:50
  • 1
    Unfortunately the question got closed and I have no way of pinging the user that closed it. However, I'd guess that the null gets inserted at the time of calling the constructor in `artist = new Artist(Integer.parseInt...`. – nanofarad Aug 12 '16 at 21:53
  • @hexafraction I did not close it, someone marked it as duplicate. What would you suggest doing then? – Siemen Gijbels Aug 12 '16 at 21:59
  • Let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/120841/discussion-between-siemen-gijbels-and-hexafraction). – Siemen Gijbels Aug 12 '16 at 22:14

1 Answers1

0

The problem is that db.getArtist(1) is null. you need to look at your database and make sure that the data is there. Set a breakpoint and debug the code.

It looks like you code is creating the artists on Creation of the View. Are you sure that they are making it all of the way to the DB?

TychonOmega
  • 116
  • 8