0

I am using a spinner that has data to be filled in by an Array Adapter. The code returns a run-time error caused by NullPointerException. I have declared the spinner and initialized it in on create method.The error still persists. Please help me solve the bug.

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener
{

Button btnCfg, btnConnect, btnClear, btnUpload, btnDownload, btnLoad_on, btnLoad_off;
TextView txtSelectDayTitle;
Spinner spinnerDay;
private String[] arraySpinner;
private Context context;


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

    //Automatic Day Picker
    String from = getIntent().getStringExtra("FROM");
    if (from != null && from.equals("DaysOfTheWeek"))
    {
        this.arraySpinner = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

    }
    //Initialization of variables
    spinnerDay = (Spinner) findViewById(R.id.spinnerDay);
    btnCfg = (Button) findViewById(R.id.btnCfg);
    btnConnect = (Button) findViewById(R.id.btnConnect);
    btnClear = (Button) findViewById(R.id.btnClear);
    btnUpload = (Button) findViewById(R.id.btnUpload);
    btnDownload = (Button) findViewById(R.id.btnDownload);
    btnLoad_on = (Button) findViewById(R.id.btnLoad_on);
    btnLoad_off = (Button) findViewById(R.id.btnLoad_off);
    txtSelectDayTitle = findViewById(R.id.txtSelectDayTitle);


    SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE");
    Date d = new Date();
    Calendar calendar = null;
    try
    {
        calendar = Calendar.getInstance();
        calendar.setTime(d);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    String dayOfTheWeek = dayFormat.format(d);
    txtSelectDayTitle.setText(dayOfTheWeek);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arraySpinner);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerDay.setAdapter(adapter);

Logcat:

Caused by: java.lang.NullPointerException
    at java.util.Objects.requireNonNull(Objects.java:203)
    at java.util.Arrays$ArrayList.<init>(Arrays.java:3741)
    at java.util.Arrays.asList(Arrays.java:3728)
    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:163)
    at com.example.itimer.MainActivity.onCreate(MainActivity.java:110)
    at android.app.Activity.performCreate(Activity.java:7023)
    at android.app.Activity.performCreate(Activity.java:7014)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2758)
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96

2 Answers2

0

Check if this part of your code is getting initialized,

String from = getIntent().getStringExtra("FROM");
if (from != null && from.equals("DaysOfTheWeek"))
{
    this.arraySpinner = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

}

Confirm if arraySpinner is not null. If it is null then this is causing that null pointer exception.

Rohit J
  • 107
  • 7
0

The problem is simply because you have a null value of arraySpinner variable for the Adapter.

You should always initialize the array whenever you need to give it to your Adapter.

You can use one of the following options:

First option, always initialize the array:

String from = getIntent().getStringExtra("FROM");
if (from == null) {
  // initialize the array when found nothing
  arraySpinner = new String[];

} else if(from.equals("DaysOfTheWeek")) {
    arraySpinner = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

} else {
  // initialize the array when incorrect from string found.
  arraySpinner = new String[];
}

Second option, crash the program when there is no from string:

String from = getIntent().getStringExtra("FROM");
if (from == null) {
  throw new RuntimeException("No extra found!");
  return;
}

// if incorrect from string found
if (!from.equals("DaysOfTheWeek")) {
  throw new RuntimeException("No DaysOfTheWeek found!");
  return;
}

 // correct extra for from is found.
 arraySpinner = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
ישו אוהב אותך
  • 28,609
  • 11
  • 78
  • 96