0

Bank.java file code

package com.example.bloodbank;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;


public class Bank extends AppCompatActivity {
    private Spinner spBloodGroup,spCity;
    private String bgArray[]=new String[] {"A+","A-","B+","B-","O+","O-","AB+","AB-"};
    private DBConnection db;
    private ListView lvDonors;
    private ArrayList<String> city,name;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acitvity_bank);

        //Initialisation spinner
        spBloodGroup=findViewById(R.id.spBloodGroup);
        spCity=findViewById(R.id.spCity);

        //Initialisation ListView
        lvDonors=findViewById(R.id.lvDonors);

        //ArrayAdapter to spinner blood group
        ArrayAdapter<String> adapter =new ArrayAdapter<>(this,R.layout.bank_spinner,bgArray);
        spBloodGroup.setAdapter(adapter);

        //Initialisation of Arraylist
        city=new ArrayList<String>();
        name=new ArrayList<>();

        //Initialisation of database onject
        db=new DBConnection(this);

        //Populating City spinner
        populateList();
        ArrayAdapter<String> adapter1=new ArrayAdapter<>(this,R.layout.spinner_city,city);
        spCity.setAdapter(adapter1);



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

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

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

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

            }
        });


    }

    private void populateList() {
        SQLiteDatabase sqldb=db.getWritableDatabase();
        Cursor cursor=sqldb.rawQuery("select city from registration",null);
        while(cursor.moveToNext()) {
            city.add(cursor.getString(cursor.getColumnIndex("city")));
        }
    }

    private void filterDonor() {
        name.clear();
        SQLiteDatabase sqldb=db.getWritableDatabase();
        Cursor cursor=sqldb.rawQuery("select name from registration natural join donor where donor.bloodgroup='"+spBloodGroup.getSelectedItem().toString()+"' and registration.city='"+spCity.getSelectedItem().toString()+"'",null);
        while(cursor.moveToNext()) {
            name.add(cursor.getString(cursor.getColumnIndex("name")));
        }
        ArrayAdapter<String> adapter=new ArrayAdapter<>(this,R.layout.custom_listview,R.id.lvDonors,name);
        lvDonors.setAdapter(adapter);

    }
}

Custom_listview.xml layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp">
    <TextView
        android:id="@+id/lvtvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="34sp"
        android:textColor="#000000"/>
</RelativeLayout>

activity_bank.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".Bank">

    <TextView
        android:id="@+id/tvDonarHeader"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Donate"
        android:textSize="44sp"
        android:textColor="#FF0000"
        android:layout_centerHorizontal="true"/>
    <TextView
        android:id="@+id/tvBLoodGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Blood Group"
        android:layout_below="@+id/tvDonarHeader"
        android:textSize="20sp"
        android:textColor="#000000"
        android:layout_marginRight="5dp"/>

    <Spinner
        android:id="@+id/spBloodGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/tvBLoodGroup"
        android:layout_below="@+id/tvDonarHeader"/>
    <TextView
        android:id="@+id/tvCity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="City"
        android:layout_below="@+id/tvDonarHeader"
        android:textSize="20sp"
        android:layout_toRightOf="@+id/spBloodGroup"
        android:textColor="#000000"
        android:layout_marginRight="5dp"/>

    <Spinner
        android:id="@+id/spCity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/tvCity"
        android:layout_below="@+id/tvDonarHeader"/>

    <ListView
        android:id="@+id/lvDonors"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_below="@+id/spBloodGroup"
        android:divider="@color/teal_200"
        android:dividerHeight="2dp"
        android:listSelector="@color/teal_200"/>

</RelativeLayout>

Getting This error

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.bloodbank, PID: 16440 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:392) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) at android.widget.AbsListView.obtainView(AbsListView.java:2459) at android.widget.ListView.measureHeightOfChildren(ListView.java:1281) at android.widget.ListView.onMeasure(ListView.java:1189) at android.view.View.measure(View.java:17765) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:841) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:507) at android.view.View.measure(View.java:17765) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5620) at android.widget.FrameLayout.onMeasure(FrameLayout.java:454) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145) at android.view.View.measure(View.java:17765) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5620) at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:496) at android.view.View.measure(View.java:17765) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5620) at android.widget.FrameLayout.onMeasure(FrameLayout.java:454) at android.view.View.measure(View.java:17765) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5620) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1687) at android.widget.LinearLayout.measureVertical(LinearLayout.java:755) at android.widget.LinearLayout.onMeasure(LinearLayout.java:624) at android.view.View.measure(View.java:17765) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5620) at android.widget.FrameLayout.onMeasure(FrameLayout.java:454) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2616) at android.view.View.measure(View.java:17765) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2349) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1373) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1597) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1251) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6438) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:795) at android.view.Choreographer.doCallbacks(Choreographer.java:598) at android.view.Choreographer.doFrame(Choreographer.java:567) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:781) at android.os.Handler.handleCallback(Handler.java:810) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:189) at android.app.ActivityThread.main(ActivityThread.java:5532) 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:950) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)

1 Answer 1

0

It would appear to me that on the second to last line, you are attempting to invoke this constructor:

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

Notice that the third argument is supposed to be a reference to a TextView. But your third argument is a reference to a ListView.

Sign up to request clarification or add additional context in comments.

3 Comments

so what should i do . i want to populate listview with ArrayList
What should you do? You should change R.id.lvDonors to R.id.lvtvName in the second to last line of your code inside of the ArrayAdapter constructor and see if the symptom changes.
I just replace the listview id with custom textview id and it works fine.Thank you...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.