我正在做一个应用程序,我需要在我的 firebase 中获取纬度和经度。将 Latlng 放入 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();
}
}
});
}
});
我不知道如何区分我的纬度、我的经度、描述和 URL。我不知道该怎么办了。
编辑:在你发给我之后我试过了:
BtnMarker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
HandleData.Pin pin = snapshot.getValue(HandleData.Pin.class);
Toast.makeText(OnlyVert.this, pin.getLat(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
错误是 com.google.firebase.database.DatabaseException: 类 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);
}
}
关于java - 我无法从 Firebase (Java) 获取特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376502/