Attempting to write my first ArrayAdapter for Android, failing miserably at the moment. It crashes on the setAdapter(adapter); line and throws a NullPointerException.
ContractTestActivity:
public class ContractTestActivity extends Activity {
    private ArrayList<Contract> contracts;
    public final String TAG = "ContractTest";
    //public Contract newContract = new Contract();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView list;
        list = (ListView)findViewById(R.id.list);
        ArrayAdapter<Contract> adapter = new ContractAdapter(this, android.R.layout.simple_list_item_1, contracts);
        list.setAdapter(adapter);
    }
}
ContractAdapter:
public class ContractAdapter extends ArrayAdapter<Contract> {
        private ArrayList<Contract> contracts;
        public ContractAdapter(Context context, int view, ArrayList<Contract> passedContracts) {
                super(context, view, passedContracts);
                contracts = passedContracts;
        }
        @Override
        public int getCount() {
            return contracts.size();
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View currentView = convertView;
                LayoutInflater currentViewInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                currentView = currentViewInflater.inflate(android.R.layout.simple_list_item_1, null);
                Contract currentContract = contracts.get(position);
                TextView text = (TextView) currentView.findViewById(android.R.id.text1);
                text.setText(currentContract.getName());
                return currentView;
        }
}
Contract:
public class Contract extends ContractTestActivity {
    private String name;
    private float payRate;
    private int hoursWorked;
    private int holidays;
    public Contract() {
    }
    public String getName() {
        return name;
    }
}
Suggestions?
The problem is that you are not initializing your ArrayList
private ArrayList<Contract> contracts;
Its therefore you are getting the error NullPointerException.
UPADATED:
ContractTestActivity.java
public class ContractTestActivity extends Activity {
    private List<Contract> contracts = new ArrayList<Contract>();
    public final String TAG = "ContractTest";
    //public Contract newContract = new Contract();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView list;
        list = (ListView)findViewById(R.id.mylist);
        ArrayAdapter<Contract> adapter = new ContractAdapter(this, android.R.layout.simple_list_item_1, myContracts());
        list.setAdapter(adapter);
    }
    private List<Contract> myContracts(){
        List<Contract> list = new ArrayList<Contract>();
        list.add(new Contract("Friend1"));
        list.add(new Contract("Friend2"));
        list.add(new Contract("Friend3"));
        list.add(new Contract("Friend4"));
        return list;
    }
}
Contract.java
public class Contract {
    private String name;
    public Contract(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
ContractAdapter.java
public class ContractAdapter extends ArrayAdapter<Contract> {
    private List<Contract> contracts;
    public ContractAdapter(Context context, int view, List<Contract> passedContracts) {
            super(context, view, passedContracts);
            contracts = passedContracts;
    }
    @Override
    public int getCount() {
        return contracts.size();
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            View currentView = convertView;
            LayoutInflater currentViewInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            currentView = currentViewInflater.inflate(android.R.layout.simple_list_item_1, null);
            Contract currentContract = contracts.get(position);
            TextView text = (TextView) currentView.findViewById(android.R.id.text1);
            text.setText(currentContract.getName());
            return currentView;
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With