Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能';t从Firebase(Java)获取特定数据_Java_Firebase_Firebase Realtime Database - Fatal编程技术网

我能';t从Firebase(Java)获取特定数据

我能';t从Firebase(Java)获取特定数据,java,firebase,firebase-realtime-database,Java,Firebase,Firebase Realtime Database,我正在做一个应用程序,我需要在我的firebase中获取纬度和经度。我把板条放在firebase没有任何问题,但我拿不回来。这就是它看起来的样子: 这就是我把它们放进firebase的代码 Ajouter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mProgress.setTitle("Le point

我正在做一个应用程序,我需要在我的firebase中获取纬度和经度。我把板条放在firebase没有任何问题,但我拿不回来。这就是它看起来的样子:

这就是我把它们放进firebase的代码

Ajouter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mProgress.setTitle("Le point se charge");
            mProgress.setMessage("Merci de patientez, ce ne sera pas long");
            mProgress.show();
            mAuth = FirebaseAuth.getInstance();
            FirebaseUser user = mAuth.getCurrentUser();
            mFirebaseDatabase = FirebaseDatabase.getInstance();
            mMarkDatabase = mFirebaseDatabase.getReference();
            final String key = mMarkDatabase.child("Pins").push().getKey();

            final StorageReference ref = mStorage.child("Photos/" + UUID.randomUUID().toString());
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] data = baos.toByteArray();
            UploadTask uploadTask = ref.putBytes(data);
            uploadTask = ref.putFile(ImageUri);
            Task<Uri> urltask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if (!task.isSuccessful()) {
                        throw task.getException();
                    }

                    return ref.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    if (task.isSuccessful()) {

                        downloadUrl = task.getResult();
                        downloadUrlTxt = downloadUrl.toString();

                        //uploadImage();
                        String lon = Double.toString(Longitude);
                        String lat = Double.toString(Latitude);
                        String txt = TxtAout.getText().toString();
                        switch (spinner.getSelectedItemPosition()){
                            case 0 :
                                item.put("ImageUrl", ""+downloadUrlTxt);
                                item.put("Longitude ", lon);
                                item.put("Latitude", lat);
                                item.put("Description", txt);
                                mMarkDatabase.child("Pins").child("Poubelle").child(key).setValue(item);
                                break;
                            case 1 :
                                item.put("ImageUrl", ""+downloadUrlTxt);
                                item.put("Longitude ", lon);
                                item.put("Latitude", lat);
                                item.put("Description", txt);
                                mMarkDatabase.child("Pins").child("BlueLy").child(key).setValue(item);
                                break;
                            case 2 :
                                item.put("ImageUrl", ""+downloadUrlTxt);
                                item.put("Longitude ", lon);
                                item.put("Latitude", lat);
                                item.put("Description", txt);
                                mMarkDatabase.child("Pins").child("Parcs a chiens").child(key).setValue(item);
                                break;
                            case 3 :
                                item.put("ImageUrl", ""+downloadUrlTxt);
                                item.put("Longitude ", lon);
                                item.put("Latitude", lat);
                                item.put("Description", txt);
                                mMarkDatabase.child("Pins").child("Collecte de vetements").child(key).setValue(item);
                                break;
                            default :
                                Toast.makeText(LocalisationOnlyVert.this, "Erreur, merci de recommencer", Toast.LENGTH_SHORT).show();
                        }

                        mProgress.dismiss();
                        Toast.makeText(LocalisationOnlyVert.this, "Merci de votre ajout !", Toast.LENGTH_SHORT).show();
                        TxtAout.setText("");
                        Intent Retour = new Intent (LocalisationOnlyVert.this, OnlyVert.class);
                        startActivity(Retour);
                        Toast.makeText(LocalisationOnlyVert.this, ""+downloadUrlTxt , Toast.LENGTH_LONG).show();
                    }
                }
            });

        }
    });

错误在于
com.google.firebase.database.DatabaseException:Class com.example.alexandre.onlyvert.HandleData$Pin未定义无参数构造函数。如果您使用的是ProGuard,请确保这些构造函数没有被剥离。

使用下面的类,因为它已经得到了您想要的一切

您可以使用此设置数据并跟踪事件

您可以使用此功能获取数据并再次跟踪事件

 public class HandleData {

    private OnDataSet onDataSet;
    private OnDataCallBack onDataCallBack;

    public void setOnDataSet(OnDataSet onDataSet) {
        this.onDataSet = onDataSet;
    }

    public void setOnDataCallBack(OnDataCallBack onDataCallBack) {
        this.onDataCallBack = onDataCallBack;
    }

    private FirebaseDatabase firebaseDatabase;

    public HandleData() {
        firebaseDatabase = FirebaseDatabase.getInstance();
    }

    public void putData(String specificNode, Pin pin){
        DatabaseReference databaseReference = firebaseDatabase.getReference("path/to/node/").child(specificNode);
        databaseReference.setValue(pin).addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                if(onDataSet != null){
                    onDataSet.onSucess();
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                if(onDataSet != null){
                    onDataSet.onFailed(e.toString());
                }
            }
        });
    }

    public void readData(String specificNode){
        DatabaseReference databaseReference = firebaseDatabase.getReference("path/to/node/").child(specificNode);
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                    int initCount = 0;
                    int totalCount = (int) dataSnapshot.getChildrenCount();
                    ArrayList<Pin> pins = new ArrayList<>();
                    for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                        initCount = initCount +1;
                        Pin pin = snapshot.getValue(Pin.class);
                        pins.add(pin);
                        if(initCount == totalCount){
                            if(onDataCallBack != null){
                                onDataCallBack.onSuccess(pins);
                            }
                        }

                    }
                }else{
                    if(onDataCallBack != null){
                        onDataCallBack.onFailed("no data found in database");
                    }
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                if(onDataCallBack != null){
                    onDataCallBack.onFailed(databaseError.toString());
                }
            }
        });
    }

    public class Pin{

        private String about;
        private String imgUrl;
        private String lat;
        private String lng;

        public Pin() {

        }

        public Pin(String about, String imgUrl, String lat, String lng) {
            this.about = about;
            this.imgUrl = imgUrl;
            this.lat = lat;
            this.lng = lng;
        }

        public String getAbout() {
            return about;
        }

        public void setAbout(String about) {
            this.about = about;
        }

        public String getImgUrl() {
            return imgUrl;
        }

        public void setImgUrl(String imgUrl) {
            this.imgUrl = imgUrl;
        }

        public String getLat() {
            return lat;
        }

        public void setLat(String lat) {
            this.lat = lat;
        }

        public String getLng() {
            return lng;
        }

        public void setLng(String lng) {
            this.lng = lng;
        }
    }

    public interface OnDataSet{
        void onSucess();
        void onFailed(String error);
    }

    public interface OnDataCallBack{
        void onSuccess(ArrayList<Pin> pins);
        void onFailed(String error);
    }

}
公共类HandleData{
私有OnDataSet OnDataSet;
私有OnDataCallBack OnDataCallBack;
公共无效集合OnDataSet(OnDataSet OnDataSet){
this.onDataSet=onDataSet;
}
公共void setOnDataCallBack(OnDataCallBack OnDataCallBack){
this.onDataCallBack=onDataCallBack;
}
私有FirebaseDatabase FirebaseDatabase;
公共手册数据(){
firebaseDatabase=firebaseDatabase.getInstance();
}
公共无效数据(字符串特定节点、Pin){
DatabaseReference DatabaseReference=firebaseDatabase.getReference(“path/to/node/”).child(specificNode);
databaseReference.setValue(pin).addOnSuccessListener(新OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
if(onDataSet!=null){
onDataSet.onSucess();
}
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
if(onDataSet!=null){
onDataSet.onFailed(例如toString());
}
}
});
}
公共void readData(字符串特定节点){
DatabaseReference DatabaseReference=firebaseDatabase.getReference(“path/to/node/”).child(specificNode);
databaseReference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
int initCount=0;
int totalCount=(int)dataSnapshot.getChildrenCount();
ArrayList引脚=新的ArrayList();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
initCount=initCount+1;
Pin=snapshot.getValue(Pin.class);
pins.add(pin);
if(initCount==totalCount){
如果(onDataCallBack!=null){
onDataCallBack.onSuccess(pins);
}
}
}
}否则{
如果(onDataCallBack!=null){
onDataCallBack.onFailed(“数据库中找不到数据”);
}
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
如果(onDataCallBack!=null){
onDataCallBack.onFailed(databaseError.toString());
}
}
});
}
公共类Pin码{
私人串;
私有字符串imgUrl;
私有字符串lat;
私人液化天然气;
公共密码(){
}
公共Pin码(字符串约、字符串imgUrl、字符串lat、字符串lng){
这个;
this.imgUrl=imgUrl;
this.lat=lat;
这是液化天然气=液化天然气;
}
公共字符串getAbout(){
返回大约;
}
公共无效设置(字符串设置){
这个;
}
公共字符串getImgUrl(){
返回图像;
}
公共void setImgUrl(字符串imgUrl){
this.imgUrl=imgUrl;
}
公共字符串getLat(){
返回lat;
}
公共void setLat(字符串lat){
this.lat=lat;
}
公共字符串getLng(){
返回液化天然气;
}
公共空隙设置(管柱液化天然气){
这是液化天然气=液化天然气;
}
}
公共接口数据集{
void onsuces();
void onFailed(字符串错误);
}
公共接口OnDataCallBack{
成功时无效(ArrayList引脚);
void onFailed(字符串错误);
}
}
这里有一个输入错误

item.put("Longitude ", lon);
换成这个

item.put("Longitude", lon);
因为这是在Firebase结构中用“”推送键值,所以无法获取该值,因为地图需要键值对才能工作,并且它无法找到经度数据

此外,在更改后,您需要推送新值并删除数据库中错误的值

logcat异常就在这里指出

double longitude = Double.parseDouble(map.get("Longitude"));
用这个

java.util.Map具有泛型类型参数

现在,获取数据

据我所知,您需要按下一个按钮并从firebase的该节点获取所有LatLang,假设您有一个按钮Poubelle,该按钮获取该节点的所有纬度和经度,可以通过这种方式完成

        mDatabase = FirebaseDatabase.getInstance().getReference();
        DatabaseReference mPoubelleRef = mDatabase.child("Pins").child("Poubelle");

        BtnPoubelle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                mPoubelleRef.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                 Map<String, String> map = snapshot.getValue(Map.class);
                            double latitude = Double.parseDouble(map.get("Latitude"));
                            double longitude = Double.parseDouble(map.get("Longitude"));

               //or get the data with a model (is the same thing as above)
               YourModel model = snapshot.getValue(YourModel.class);
               double latitude = model.getLatitude();
               double longitude = model.getLongitude();

               }
          }

          @Override
          public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
          }
        });
        }
mDatabase=FirebaseDatabase.getInstance().getReference();
DatabaseReference mPoubelleRef=mDatabase.child(“Pins”).child(“Poubelle”);
BtnPoubelle.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mPoubelleRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
贴图=捕捉
        mDatabase = FirebaseDatabase.getInstance().getReference();
        DatabaseReference mPoubelleRef = mDatabase.child("Pins").child("Poubelle");

        BtnPoubelle.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                mPoubelleRef.addValueEventListener(new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                 Map<String, String> map = snapshot.getValue(Map.class);
                            double latitude = Double.parseDouble(map.get("Latitude"));
                            double longitude = Double.parseDouble(map.get("Longitude"));

               //or get the data with a model (is the same thing as above)
               YourModel model = snapshot.getValue(YourModel.class);
               double latitude = model.getLatitude();
               double longitude = model.getLongitude();

               }
          }

          @Override
          public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
          }
        });
        }