Java 在AndroidStudio中从firebase检索数据

Java 在AndroidStudio中从firebase检索数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我发现从firebase检索数据时出错。我从firebase数据库中的child(“H_位置”)获取数据。当我按下手机上的pickupButton时,此应用程序将自动关闭 Hare是我在MngaddHospital片段中的代码: import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import android.view.LayoutInfl

我发现从firebase检索数据时出错。我从firebase数据库中的child(“H_位置”)获取数据。当我按下手机上的pickupButton时,此应用程序将自动关闭

Hare是我在MngaddHospital片段中的代码:




import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

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 java.util.Objects;

public class MngAddHospitalFragment extends Fragment {

    private EditText hospital_name,hospital_email,hospital_number,h_lat,h_long;
    private Button pickButton,add_hospital_button;

    DatabaseReference href;

    //int PLACE_PICKER_REQUEST=1;




    public MngAddHospitalFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_mng_add_hospital, container, false);

        hospital_name=(EditText) v.findViewById(R.id.hospital_name);
        hospital_email=(EditText) v.findViewById(R.id.hospital_email);
        hospital_number=(EditText) v.findViewById(R.id.hospital_number);
        h_lat=(EditText) v.findViewById(R.id.hospital_lat);
        h_long=(EditText) v.findViewById(R.id.hospital_long);

        pickButton=(Button) v.findViewById(R.id.btn_lat_long);
        add_hospital_button=(Button) v.findViewById(R.id.btn_add_hospital);

        pickButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                href= FirebaseDatabase.getInstance().getReference().child("H_Location");



                href.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        String longitude= Objects.requireNonNull(dataSnapshot.child("H_Location").getValue()).toString();
                        String latitude= Objects.requireNonNull(dataSnapshot.child("H_Location").getValue()).toString();

                        h_long.setText(longitude);
                        h_lat.setText(latitude);

                    }

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

                    }
                });
            }
        });
return v;
}

所以问题是,当我在手机中单击PickubButton时,手机会关闭此应用程序并转到主屏幕。 因此,请给出一个解决方案来克服这种情况


谢谢

您需要提供字段名而不是父项

String longitude= Objects.requireNonNull(dataSnapshot.child("latitude").getValue(String.class));
String latitude= Objects.requireNonNull(dataSnapshot.child("longitude").getValue(String.class));

使用以下代码:

            @Override
            public void onClick(View v) {
                href= FirebaseDatabase.getInstance().getReference().child("H_Location");



                href.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        String longitude= dataSnapshot.child("longitude").getValue(String.class);
                        String latitude = dataSnapshot.child("latitude").getValue(String.class);

                        h_long.setText(longitude);
                        h_lat.setText(latitude);

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {        
                Log.d(TAG,databaseError.getMessage());
                    }
                });
您的引用位于节点
H_位置
,然后要获得纬度和经度,需要将它们添加到
child()
方法中


不要忘记使用
databaseError.getMessage()

处理错误。请发布堆栈跟踪。虽然给出的答案是正确的,但您可能会在quora上发现此答案也很有用。