首页 > 解决方案 > Application crashes when item from searchable spinner is selected

问题描述

when item(hospital name) from searchable spinner is selected i want to retrieve the that specific hospital contact number from FireBase . here i want to retrieve HosCno while specific HosName is selected. when item(hospital name) from searchable spinner is selected i want to retrieve the that specific hospital contact number from FireBase . here i want to retrieve HosCno while specific HosName is selected.

package com.varad_industries.helpinghands;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.toptoche.searchablespinnerlibrary.SearchableSpinner;
import com.varad_industries.helpinghands.Interface.IFirebaseLoadDone;
import com.varad_industries.helpinghands.Model.Member;

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

public class MainActivity extends AppCompatActivity implements IFirebaseLoadDone {

    SearchableSpinner searchableSpinner;
    DatabaseReference reff;
    IFirebaseLoadDone iFirebaseLoadDone;
    List<Member> members;
    TextView hcontact;
    BottomSheetDialog bottomSheetDialog;
    boolean isFirstTimeClick = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button ahos =   findViewById(R.id.button);
        ahos.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"Loading...",Toast.LENGTH_SHORT).show();

                Intent i = new Intent(getApplicationContext(), addhos.class);
                startActivity(i);
            }
        });
            //code for case spinner
        Spinner spinner = findViewById(R.id.spinner); //s w 398dp
        ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,R.array.cases,android.R.layout.simple_spinner_item);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(arrayAdapter);
            //end of code for spinner


        searchableSpinner = (SearchableSpinner)findViewById(R.id.searchable_spinner);

        bottomSheetDialog = new BottomSheetDialog(this);
        View bottom_sheet_dialog = getLayoutInflater().inflate(R.layout.activity_main,null);

        //code for get selected hospital number
        hcontact = (TextView) bottom_sheet_dialog.findViewById(R.id.hcontact);
        bottomSheetDialog.setContentView(bottom_sheet_dialog);


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

                Toast.makeText(getApplicationContext(),"item clicked",Toast.LENGTH_LONG).show();
                Member member = members.get(i);
                hcontact.setText(member.getHosCno());


                bottomSheetDialog.show();


            }

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

            }
        });

        //
    }

    @Override
    protected void onResume() {
        super.onResume();

        reff = FirebaseDatabase.getInstance().getReference("Member");
        iFirebaseLoadDone = this;
        reff.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                List<Member> members = new ArrayList<>();
                for(DataSnapshot hospitalSnapShot:dataSnapshot.getChildren())
                {
                    members.add(hospitalSnapShot.getValue(Member.class));
                }
                iFirebaseLoadDone.onFirebaseLoadSuccess(members);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

                iFirebaseLoadDone.onFirebaseLoadFailed(databaseError.getMessage());
            }
        });


    }

    @Override
    public void onFirebaseLoadSuccess(List<Member> memberList) {
        members = memberList;
        List<String> name_list = new ArrayList<>();
        for(Member member:memberList)
            name_list.add(member.getHosName());

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,name_list);
        searchableSpinner.setAdapter(adapter);
    }


    @Override
    public void onFirebaseLoadFailed(String message) {

    }

}

Error showing in logcat

2020-03-23 16:48:41.113 20768-20768/com.varad_industries.helpinghands E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.varad_industries.helpinghands, PID: 20768
    android.content.res.Resources$NotFoundException: String resource ID #0x6f855
        at android.content.res.Resources.getText(Resources.java:347)
        at android.content.res.MiuiResources.getText(MiuiResources.java:97)
        at android.widget.TextView.setText(TextView.java:4557)
        at com.varad_industries.helpinghands.MainActivity$2.onItemSelected(MainActivity.java:77)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:931)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:920)
        at android.widget.AdapterView.-wrap1(AdapterView.java)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:890)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

标签: javaandroidfirebase

解决方案


当设置为时,您应该将文本设置为String以防止将值提取为资源Int

hcontact.setText(String.valueOf(member.getHosCno()));

推荐阅读