0

I want to pass the value of the selected spinner item. In my activity there are 2 pairs of spinner and in every pair the second spinner is dependent on the value of the first spinner. As i need to pass the value to another activity, i took the values in different string variables and pass them to another activity. But the activity is maybe showing nullpointer execption in the Spinner.getSelectedItem().toString() method.

activityClass

package com.example.bohon_final__001;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class SqlitemainActivity extends AppCompatActivity {
    Spinner pickupspinner1,pickupspinner2,destspinner1,destspinner2;
    Button selectbtn;
    EditText inputLabel;


    String pickdistrict,pickarea,destdistrict,destarea,vehicletype;

    ArrayList<String>disarray;
    ArrayAdapter<String>disarray_adapter;

    ArrayList<String>sylhet,moulovibazar,sunamgonj,habiganj;
    ArrayAdapter<String>area;




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


        pickupspinner1 = (Spinner)findViewById(R.id.pickupspinner1);
        pickupspinner2 = (Spinner)findViewById(R.id.pickupspinner2);

        destspinner1=(Spinner)findViewById(R.id.destinationspinner1);
        destspinner2=(Spinner)findViewById(R.id.destinationspinner2);

        selectbtn=findViewById(R.id.selectbutton);

        String vehicletype=getIntent().getStringExtra("vehicleType");

        disarray=new ArrayList<>();
        disarray.add("Sylhet");
        disarray.add("Sunamgonj");
        disarray.add("Moulovibazar");
        disarray.add("Habiganj");

        disarray_adapter=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,disarray);
        pickupspinner1.setAdapter(disarray_adapter);
        destspinner1.setAdapter(disarray_adapter);


        sylhet=new ArrayList<>();
        sylhet.add("Sylhet Sadar");
        sylhet.add("Dakshin Surma");
        sylhet.add("Moglabazar");
        sylhet.add("Kanaighat");
        sylhet.add("Bishwanath");


        sunamgonj=new ArrayList<>();
        sunamgonj.add("Sunamganj Sadar");
        sunamgonj.add("Chhatak");
        sunamgonj.add("Jagannathpur");
        sunamgonj.add("Jamalganj");
        sunamgonj.add("Derai");



        moulovibazar=new ArrayList<>();
        moulovibazar.add("Barlekha");
        moulovibazar.add("Kulawra");
        moulovibazar.add("Moulovibazar Sadar");
        moulovibazar.add("Rajnagar");
        moulovibazar.add("Sreemongol");




        habiganj=new ArrayList<>();
        habiganj.add("Ajmiriganj");
        habiganj.add("Baniachang");
        habiganj.add("Bahubal");
        habiganj.add("Chunarughat");
        habiganj.add("Habiganj Sadar");

        pickupspinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                if(i==0)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,sylhet);

                }

                if(i==1)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,sunamgonj);

                }

                if(i==2)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,moulovibazar);

                }

                else
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,habiganj);

                }


                pickupspinner2.setAdapter(area);

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });





        destspinner1.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if(i==0)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,sylhet);
                }

                if(i==1)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,sunamgonj);
                }

                if(i==2)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,moulovibazar);
                }

                if(i==3)
                {
                    area=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_spinner_item,habiganj);
                }


                destspinner2.setAdapter(area);

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });



        pickdistrict=pickupspinner1.getSelectedItem().toString();
        pickarea=String.valueOf(pickupspinner2.getSelectedItem());
        destdistrict=destspinner1.getSelectedItem().toString();
        destarea=destspinner2.getSelectedItem().toString();




        selectbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent submissionintent=new Intent(SqlitemainActivity.this,FinalRequestActivity.class);
                submissionintent.putExtra("pickd",pickdistrict);
                submissionintent.putExtra("picka",pickarea);
                submissionintent.putExtra("desd",destdistrict);
                submissionintent.putExtra("desa",destarea);
                submissionintent.putExtra("vtype",vehicletype);
                startActivity(submissionintent);
            }
        });








    }



}

Activity Class Xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".SqlitemainActivity"
    android:orientation="vertical"
    android:background="#000000"


    >

        <TextView
            android:layout_width="230dp"
            android:layout_height="wrap_content"
            android:text="Select Your District:"
            android:layout_marginStart="0dp"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="50dp"
            android:textStyle="italic"
            android:textColor="#F44336"
            android:textSize="15sp"
            />

    <TextView
        android:layout_width="171dp"
        android:layout_height="wrap_content"
        android:text="Area:"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="120dp"
        android:textStyle="italic"
        android:textColor="#F44336"
        android:textSize="15sp"
        />

        <TextView
            android:id="@+id/pickuplocationtext"
            android:layout_width="355dp"
            android:layout_height="wrap_content"
            android:layout_marginVertical="20dp"
            android:text="Select your Pickup Location"
            android:textColor="@color/yellow"
            android:textSize="20sp"
            android:textStyle="bold" />

    <Spinner
        android:id="@+id/pickupspinner1"
        android:layout_width="253dp"
        android:layout_height="37dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="70dp"
        android:background="#FF8100" />

    <Spinner
        android:id="@+id/pickupspinner2"
        android:layout_width="203dp"
        android:layout_height="30dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="150dp"
        android:background="#FF8100" />





    <Button
            android:id="@+id/selectbutton"
            android:layout_width="214dp"
            android:layout_height="63dp"
            android:layout_marginLeft="90dp"
            android:layout_marginTop="600dp"
            android:background="@drawable/selectart"
            android:text="" />








        <TextView
            android:id="@+id/destlocationtext"
            android:layout_width="355dp"
            android:layout_height="wrap_content"
            android:layout_marginVertical="230dp"
            android:text="Select your Destination Location"
            android:textColor="@color/yellow"
            android:textSize="20sp"
            android:textStyle="bold" />

    <TextView
        android:layout_width="230dp"
        android:layout_height="wrap_content"
        android:text="Select Your District:"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="260dp"
        android:textStyle="italic"
        android:textColor="#F44336"
        android:textSize="15sp"
        />

    <TextView
        android:layout_width="171dp"
        android:layout_height="wrap_content"
        android:text="Area:"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="320dp"
        android:textStyle="italic"
        android:textColor="#F44336"
        android:textSize="15sp"

        />

    <Spinner
        android:id="@+id/destinationspinner1"
        android:layout_width="251dp"
        android:layout_height="37dp"
        android:layout_marginStart="0dp"
        android:background="#FF8100"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="280dp" />

    <Spinner
        android:id="@+id/destinationspinner2"
        android:layout_width="199dp"
        android:layout_height="31dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="350dp"
        android:background="#FF8100" />



</RelativeLayout>

Here are the errors I'm getting


  Process: com.example.bohon_final__001, PID: 1417
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bohon_final__001/com.example.bohon_final__001.SqlitemainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2952)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3087)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1817)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6746)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
        at com.example.bohon_final__001.SqlitemainActivity.onCreate(SqlitemainActivity.java:181)
        at android.app.Activity.performCreate(Activity.java:7144)
        at android.app.Activity.performCreate(Activity.java:7135)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2932)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3087) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1817) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6746) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

Markus Kauppinen
  • 3,025
  • 4
  • 20
  • 30
  • 2
    Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – itwasntme Jan 19 '20 at 19:25
  • no. I cant find how the exception is generated. – avishak chakroborty Jan 19 '20 at 20:05
  • Does this help? https://stackoverflow.com/questions/29961987/android-problems-with-getselecteditem-on-a-spinner – davidm Jan 19 '20 at 20:18

2 Answers2

0

You got NullPointerException or NPE, this is the most common exception you'll face that you must be aware of, from here you find fruitful answers and explanation about it

In your particular case, your NPE exception is due to calling toString() method on a null object, and this is not allowed to access fields and methods of an object that is is not instantiated.

  Process: com.example.bohon_final__001, PID: 1417
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bohon_final__001/com.example.bohon_final__001.SqlitemainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

Looking into your code, you call toString() for the selected item of the spinner before an item is selected, and this is the cause of the NPE

pickdistrict=pickupspinner1.getSelectedItem().toString();
pickarea=String.valueOf(pickupspinner2.getSelectedItem());
destdistrict=destspinner1.getSelectedItem().toString();
destarea=destspinner2.getSelectedItem().toString();

so you can solve this either by:

Setting a default item before calling toString(), and this can be done by

pickupspinner1.setSelection(my_default_item); // replace my_default_item with one of your spinner items
// Then you can call toString() afterwards
destdistrict = String.valueOf(pickupspinner2.getSelectedItem());

or by calling toString() whenever the user selects a spinner item so are are certain that there is an item is selected; to do so implement the onItemSelected() callback of setOnItemSelectedListener of your spinner

pickupspinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String selection = (String) parent.getItemAtPosition(position);
        destdistrict = String.valueOf(selection);
    }
}
Zain
  • 37,492
  • 7
  • 60
  • 84
0

Yeah i fixed the error. The only problem was assigning the values of the string should be inside the onCLick Button listener method instead of inside the Oncreate method.

selectbtn.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View view) {
                pickdistrict=pickupspinner1.getSelectedItem().toString();
                pickarea=String.valueOf(pickupspinner2.getSelectedItem());
                destdistrict=destspinner1.getSelectedItem().toString();
                destarea=destspinner2.getSelectedItem().toString();
                Intent submissionintent=new Intent(SqlitemainActivity.this,FinalRequestActivity.class);
                submissionintent.putExtra("pickd",pickdistrict);
                submissionintent.putExtra("picka",pickarea);
                submissionintent.putExtra("desd",destdistrict);
                submissionintent.putExtra("desa",destarea);
                submissionintent.putExtra("vtype",vehicletype);
                startActivity(submissionintent);
            }
        });