1

I've been trying to fix this null pointer exception but I cant. I know its pointing to a null object but I don't how to fix it. I am beginner in Java programming so please don't get mad if this is a stupid question.

Here is my code:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;



public class MainActivity extends Activity {

    public ArrayAdapter<String> itemsAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //EditText
        final EditText etTask = (EditText) findViewById(R.id.editText);
        final String Task = etTask.getText().toString();

        //Button
        Button btn = (Button) findViewById(R.id.button);

        //Null Fix

        //OnClickListeners
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                itemsAdapter.add(Task);
                etTask.setText("");

            }
        });

    }

}

Here is my Logcat:

09-04 06:58:32.704  16735-16735/com.example.elias.doit E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.elias.doit, PID: 16735
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.add(java.lang.Object)' on a null object reference
            at com.example.elias.doit.MainActivity$1.onClick(MainActivity.java:38)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            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:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-04 06:58:40.564  16735-16735/? I/Process﹕ Sending signal. PID: 16735 SIG: 9
Ed Holloway-George
  • 5,092
  • 2
  • 37
  • 66
Dale
  • 33
  • 3

5 Answers5

2

Your itemsAdapter is never initialized. And it has no values at all. That's why you're getting a NullPointerException when you call your add().

Try to do this:

ArrayList<String> data = new ArrayList<>();

// add some data to your ArrayList.

itemsAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);

You can also use a String[] array instead of an ArrayList<String> or any other List<String> for that matter.


On your code it should look like:

private ArrayAdapter<String> itemsAdapter;
private ArrayList<String> data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //EditText
    final EditText etTask = (EditText) findViewById(R.id.editText);
    final String task = etTask.getText().toString();

    data = new ArrayList<>();

    itemsAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data);

    //Button
    Button btn = (Button) findViewById(R.id.button);



    //OnClickListeners
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            data.add(task);
            itemsAdapter.notifyDataSetChanged();
            etTask.setText("");

        }
    });

Edit: If you're creating that ArrayAdapter to use in something like a ListView. Where is it on your code? I guess you also forgot to get it.

Something like:

ListView lv = (ListView) findViewById(R.id.yourListView);
// initialize the adapter and stuff.
lv.setAdapter(itemsAdapter);

For further reading on ListView and adapters, take a look at this link, and this tutorial. Also, check the docs.

Community
  • 1
  • 1
Mauker
  • 11,237
  • 7
  • 58
  • 76
1

Initialize your adapter itemsAdapter=new ArrayAdapter<>(...);

Rustam
  • 6,485
  • 1
  • 25
  • 25
1

Initialize your adapter in OnCreateView() and before adding any value,

itemsAdapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, taskNames);

here taskNames can an array or arrayList of task names which you would have defined as,

    ArrayList<String> taskNames; // or String[] taskNames;

Let me know if it works for you...

And do mark it as answer so that it would be useful to others...

Rohit Jagtap
  • 1,660
  • 1
  • 14
  • 12
0

You haven't created an instance of an ArrayAdapter for your itemsAdapter variable when you try to call the add() method on it.

Try to initialise it using:

itemsAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, values);

Note: values is either a String[] or List<String> so you'll need to pass that in correctly

Ed Holloway-George
  • 5,092
  • 2
  • 37
  • 66
0

I think you should try this..!

ArrayList<MyClass> myList = new ArrayList<MyClass>();
   ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(this, R.layout.row,
    to, myList.);
listView.setAdapter(adapter);
Mustafa
  • 1
  • 1